如何攝取. csv文件與空間在列名使用三角洲住到一個流表嗎?所有的字段都應該閱讀使用默認行為DLT . csv文件自動裝卸機——作為字符串。
運行管道給了我一個錯誤的無效字符列名稱的模式。(“中發現無效的字符(s), {} () \ n \ t =”的列名
模式”。)然而,添加列映射表屬性(推薦完整的錯誤評論)然後給我錯誤“com.databricks.sql.transaction.tahoe.ColumnMappingUnsupportedException:
模式變化發現:“並讓我知道”模式變化期間是不允許修改的列映射模式”。
我甚至嚐試設置模式的表信息,當閱讀. csv。
df = spark.read.format (csv) .options(頭= '真的').load (path_to_load) tbl_schema = df.schema.add (“_rescued_data”,“弦”,真的)
@dlt。表(評論= "評論"、模式= tbl_schema table_properties ={'三角洲。minReaderVersion‘:’2’、‘三角洲。5”、“delta.columnMapping minWriterVersion‘:’。模式”:“名字”})def BB_EDIP_raw():返回(spark.readStream.format .option (“cloudFiles (“cloudFiles”)。形式at", "csv") .options(header='true') # .option("inferSchema", "true") .schema(tbl_schema) .load(path_to_load) )
我仍然得到同樣的錯誤——模式改變從舊模式的“根”新模式的根/所有字段(參見下麵-縮短的字段列表):
com.databricks.sql.transaction.tahoe.ColumnMappingUnsupportedException:
模式變化檢測:
舊模式:
根
新模式:
根
——UniqueID:字符串(nullable = true)
——FirstName:字符串(nullable = true)
——MiddleName:字符串(nullable = true)
——LastName:字符串(nullable = true)
——HOME_BUSINESS:字符串(nullable = true)
——BUSINESS_OWNER1:字符串(nullable = true)
——不使用:字符串(nullable = true)
——EDUC_MODEL1:字符串(nullable = true)
——政治麵貌:字符串(nullable = true)
——工作夫婦雙重收入:字符串(nullable = true)
——在線評分:字符串(nullable = true)
——_rescued_data:字符串(nullable = true)
模式變化期間是不允許修改的列映射模式。
所以,如何攝取. csv文件空間列名使用三角洲住到一個流表嗎?是可能的嗎?我要嚐試一種不同的方法嗎?這些文件由供應商提供給我們,所以我想不必為了得到原始/銅預處理層加載。謝謝!
供參考,這是第一個錯誤的空間列名稱:
org.apache.spark.sql.AnalysisException:
發現無效的字符(s)在",{}()\ n \ t = "的列名
模式。
請啟用設置表屬性的delta.columnMapping列映射。模式的“名字”。
有關更多細節,請參考https://docs.m.eheci.com/delta/delta-column-mapping.html
或者你可以使用別名來重命名它。
org.apache.spark.sql.AnalysisException:Column name "Not in use" contains invalid character(s). Please use alias to rename it.
“withColumnRenamed”上額外的搜索之後,我能夠用“_”替換所有空間列名一次性通過選擇和別名:
@dlt。視圖(評論= " ")def vw_raw():返回(spark.readStream.format .option (“cloudFiles (“cloudFiles”)。格式”、“csv”) .options(頭= '真的').option (“inferSchema”、“true”) .load @dlt (path_to_load))。表(評論= " ")def table_raw():返回(dlt.readStream (vw_raw) .select([坳(c) .alias (c。替換(“”、“_”)的c dlt.readStream (“vw_raw”) .columns]))
它還使用“cloudFiles工作。在ferColumnTypes" = "true" and "cloudFiles.schemaHints" in the view definition.
“withColumnRenamed”上額外的搜索之後,我能夠用“_”替換所有空間列名一次性通過選擇和別名:
@dlt。視圖(評論= " ")def vw_raw():返回(spark.readStream.format .option (“cloudFiles (“cloudFiles”)。格式”、“csv”) .options(頭= '真的').option (“inferSchema”、“true”) .load @dlt (path_to_load))。表(評論= " ")def table_raw():返回(dlt.readStream (vw_raw) .select([坳(c) .alias (c。替換(“”、“_”)的c dlt.readStream (“vw_raw”) .columns]))
它還使用“cloudFiles工作。在ferColumnTypes" = "true" and "cloudFiles.schemaHints" in the view definition.