pyspark saveAsPickleFile序列化問題記錄

  1. 使用rdd.saveAsPickleFile方法是根據task個數生成對應數目的序列化文件,且每個序列化文件都有文件頭,在getmerge後無法正常解析;(調整partition個數,每個文件解析一次)

  2. 出現pickle對py2和py3不兼容的問題,導致了問題,因爲通過py3讀取py2生產的數據

UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)

參考網上的解決方案,將sparkpickle庫中的__init__.py文件中的callback函數中調用的pickle.load(file)改爲pickle.load(file, encoding=“latin1”)

  1. 在讀取數據時,最後兩個字段在pyspark中的類型爲<class ‘pyspark.ml.linalg.DenseVector’>,導致在讀取的時候需要安裝pyspark纔可以反序列化。
  2. 解決完上述問題後出現ValueError: could not convert string to float錯誤,查看錯誤位置在pyspark中的代碼ar = np.array(ar, dtype=np.float64),正在重新抽取數據,在pyspark中直接將後兩個字段使用json的方式讀取爲list進行序列化存儲

在解決問題4後,問題2和問題3也一併解決了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章