取消
顯示的結果
而不是尋找
你的意思是:

如何使用自動裝卸機和csv包含在屬性名稱空間?

Dave_Nithio
貢獻者

我試圖用自動裝卸機添加一個csv文件到三角洲表。底層的csv文件空間的屬性名稱(即。“帳號”,而不是“AccountNumber”)。當我運行我的自動裝載,我得到以下錯誤信息:

發現無效的字符(s)的,{}()\ n \ t = '列名的模式。

我的自動裝載方法是:

(火花。readStream .format .option (“cloudFiles (“cloudFiles”)。格式”、“csv”) .option (“cloudFiles。schemaLocation”, checkpoint_directory) .option(“標題”、“True”) .load (data_source) .writeStream .format(“δ”).trigger(一旦= True) .option (“checkpointLocation”, checkpoint_directory) .option (“mergeSchema”、“True”) .table (table_name))

建議的解決方案通過錯誤消息是改變列映射模式名稱的映射表中的屬性允許空間:

ALTER TABLE < table_name >設置TBLPROPERTIES(δ。minReaderVersion ' = ' 2 ', '三角洲。minWriterVersion ' = ' 5 ', ' delta.columnMapping。模式' = '名稱')

這個問題我有才就是表創建自動裝卸機,所以我不能改變表的屬性。我的問題是在兩個部分:

a我可以創建一個空白的三角洲表,這樣我就可以改變表屬性之前,半自動的跑步?例如,我可以運行:

如果不存在table_name創建或替換表

這將允許我改變表,然後運行自動裝卸機,這樣我就可以攝取csv屬性名稱中使用空格。

b還有另一種方法(可能混疊在spark.readStream)請允許我攝取這些華禾投資屬性名稱中使用空格,而不需要有一個現有表調整表屬性?

1接受解決方案

接受的解決方案

Dave_Nithio
貢獻者

@Hubert杜德克謝謝你的回應!我能夠使用您上麵提出的生成模式。問題是,模式將所有屬性設置為字符串值和重命名它們數值(‘_c0’,‘_c1’,等等)。雖然這讓我們寫流,它不準確的描述或屬性名稱的模式。如果我不是使用:

csvFile = spark.read。選項(頭=‘真正的’,inferSchema = '真的'). csv (data_source)

然後我可以改變屬性名稱:

json_str = json.dumps json_str = json_str (schema_json)。替換(" "," ")schema_json = json.loads (json_str)

然後我們可以創建ddl和通過readStream的模式。

在原帖子查看解決方案

3回複3

Dave_Nithio
貢獻者

也試圖創建一個空白pyspark dataframe和寫作為三角洲表:

df =火花。StructType createDataFrame ([] ([])) df.write.format(“δ”).saveAsTable (table_name)

但這個操作失敗:

數據用於創建三角洲表沒有任何列。

另一個選項可以創建一個測試列,改變表,然後刪除的數據流測試列。

Hubert_Dudek1
尊敬的貢獻者三世
  • metastore注冊表創建、像你說的,但是,您需要定義模式
  • 流直接寫入該表.writeStream.table (table_name)

模式,隻是閱讀你的CSV dataframe不流,把它

csvFile = spark.read.csv (yourfile) csvFile .createOrReplaceTempView (“csvFile”) schema_json =火花。sql (“SELECT * FROM csvFile”) .schema.json ddl () = spark.sparkContext._jvm.org.apache.spark.sql.types.DataType.fromJson (schema_json) .toDDL()打印(ddl)

Dave_Nithio
貢獻者

@Hubert杜德克謝謝你的回應!我能夠使用您上麵提出的生成模式。問題是,模式將所有屬性設置為字符串值和重命名它們數值(‘_c0’,‘_c1’,等等)。雖然這讓我們寫流,它不準確的描述或屬性名稱的模式。如果我不是使用:

csvFile = spark.read。選項(頭=‘真正的’,inferSchema = '真的'). csv (data_source)

然後我可以改變屬性名稱:

json_str = json.dumps json_str = json_str (schema_json)。替換(" "," ")schema_json = json.loads (json_str)

然後我們可以創建ddl和通過readStream的模式。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map