2016-09-01 54 views
3

我正在編寫一個python spark實用程序來讀取文件並進行一些轉換。 文件有大量的數據(高達12GB)。我使用sc.textFile創建一個RDD,邏輯是將每行從RDD傳遞給一個映射函數,該映射函數依次將行分割爲「,」並執行一些數據轉換(根據映射更改字段值)。PySpark如何讀取具有多個編碼的字符串的文件

從文件中取樣線。 0014164,02,031270,09,1,0,0,0000000000,134314,移動,ce87862158eb0dff3023e16850f0417a-cs31,584e2cd63057b7ed,Privé的,緋聞

由於價值觀 「貴賓俱樂部」 我得到的UnicodeDecodeError。我想下面來解析這個值:

if isinstance(v[12],basestring): 
      v[12] = v[12].encode('utf8') 
     else: 
      v[12] = unicode(v[12]).encode('utf8') 

但是當我將數據寫回文件,這個領域被翻譯爲「Priv�」。在Linux源文件類型上的 顯示爲「ISO-8859文本,非常長的行,帶有CRLF行結束符」。

有人可以讓我知道正確的方式在火花閱讀/寫混合編碼的文件請。

回答

0

致電textFile時,您可以將use_unicode設置爲False。它會爲您提供str對象(Python 2.x)或bytes對象(Python 3.x)的RDD,它們可以使用所需的編碼進一步處理。

sc.textFile(path, use_unicode=False).map(lambda x: x.decode("iso-8859-1")) 
+0

嗨zero323,感謝您的快速響應。我嘗試過,但是當我寫入文件時,我看到「Privï」的價值, – Harish

+0

您的情況下編碼可能不同,'iso-8859-1'就是一個例子。 – zero323

相關問題