有人能提供一些見解——我花了幾天時間試圖解決這個問題
我們已經裝載在數以百計的選項卡中分離的任務文本文件標簽分隔符用utf - 16編碼的小端字節序。我們的組織是一個國際性的一個,因此我們的源包含大量的unicode字符。文件的編碼不能更改,也不能格式。
經常我看到的問題是,這些unicode字符不正確顯示通過火花解釋器,另外這個問題導致標簽字段名逃脫,最終導致後續列轉向左邊。
一個典型的例子是20歐元符號U + ac€,符號顯示細notepad++打開時,vi或幾乎任何類型的unicode編輯能力。
然而當顯示在dataframe我看到¬•”,我認為這可能是一個問題,我們的應用程序的方式編碼的文件,但沒有似乎延伸到任何UTF-16LE文件編碼在Windows。我可以複製這個每次隻需輸入歐元符號與utf - 16編碼和Windows記事本保存文件加載到磚。
這是導致我們真正的問題——誰能幫忙嗎?
示例代碼:
val df =火花。讀.format (com.databricks.spark.csv) .option .option(“標題”、“true”) (“inferSchema”,“真正的”).option(“分隔符”,“\ \ t”) .option .option(“尾數法”、“小”)(“編碼”,“utf - 16”) .option .option(“字符集”、“utf - 16”) (“timestampFormat”、“yyyy-MM-dd hh: mm: ss”) .option .option(“編碼”,“gzip”) (“9”,“t \”) . csv (adls / mnt /測試/ cu100.gz)顯示(df)
這看起來可能是一個問題與csv連接器,因為:
val測試= Seq (“€”) val t =測試。toDF顯示(t)
作品absoloutely細
嗨@Dominic羅賓遜,我的同事告訴我,CSV來源應該支持UTF-16LE UTF-16BE,但不是純utf - 16。這可能有助於看CSV源的測試套件——簡單的例子是,是不可能的。好像你說應該由UTF-16LE——如果是這樣,你可能想要確認沒有差異引起的創建文件窗口。如果我沒記錯的話,Windows格式文本文件比Unix / Mac略有不同。
邊注,你不應該使用“com.databricks.spark。csv”了。火花有一個內置的csv數據源的火花2.0和磚包不再更新。
它不能讀了一個簡單的一列文本文件與歐元符號——它似乎並沒有一個windows編碼問題要麼是我寫的一個文件上使用vi Fedora:
這是一個非常簡單的例子文件:
嗨@Dominic羅賓遜我無法創建一個簡單的複製這個問題。我能寫出一個文件與歐元符號列使用dataframe.write.csv(路徑),和符號很好當我讀文件在使用spark.read.csv(路徑)。我認為你是正確的,問題是之間的交互csv源和任何生產你的文件。
你試試這個與內置的csv源了嗎?
如果你繼續有問題,請提出一個支持與磚的票。它可能是一個錯誤,也可能是您的特定用例是不支持的,可以添加到csv源頭被磚。