DataFrame儲存為hive表時的換行符問題
pyspark的DataFrame,在直接儲存為hive表時,如果字串中帶有換行符,會導致換行錯誤。以spark 3.0.0版本為例。我們向hive表儲存1條包含換行符字串的資料,統計行數時卻得到2行:
>>> df = spark.createDataFrame([(1,‘hello\nworld’)], (‘id’,‘msg’))
>>> df.write.format(‘hive’).saveAsTable(‘test.newline0’)
>>> spark.sql(‘SELECT COUNT(1) FROM test.newline0’).show()
±-------+
|count(1)|
±-------+
| 2|
±-------+
這一問題的相關文件我找了很久,最後發現是在Specifying storage format for Hive tables一節。直接使用hive格式儲存時,底層是’textfile’且預設換行符是’\n’,因此自然會出現換行錯誤。可以通過以下程式碼進行驗證:
>>> df.write.format(‘hive’).option(‘fileFormat’, ‘textfile’).option(‘lineDelim’, ‘\x13’).saveAsTable(‘test.newline1’)
Traceback (most recent call last):
File “”, line 1, in
File “/usr/share/spark-3.0.0-bin-hadoop2.7/python/pyspark/sql/readwriter.py”, line 868, in saveAsTable
self._jwrite.saveAsTable(name)
File “/usr/share/spark-3.0.0-bin-hadoop2.7/python/lib/py4j-0.10.9-src.zip/py4j/java_gateway.py”, line 1305, in call
File “/usr/share/spark-3.0.0-bin-hadoop2.7/python/pyspark/sql/utils.py”, line 137, in deco
raise_from(converted)
File “”, line 3, in raise_from
pyspark.sql.utils.IllegalArgumentException: Hive data source only support newline ‘\n’ as line delimiter, but given:
解決的方法也很簡單,使用其他格式進行儲存:
>>> df.write.format(‘hive’).option(‘fileFormat’, ‘parquet’).saveAsTable(‘test.newline1’)
>>> spark.sql(‘SELECT COUNT(1) FROM test.newline1’).show()
±-------+
|count(1)|
±-------+
| 1|
±-------+
相關文章
- 解析PHP處理換行符的問題PHP
- MySQL 儲存過程進行切換表MySql儲存過程
- 解決MongoDB儲存時間時差的問題MongoDB
- 遷移表結構時儲存空間過大問題
- Git中的AutoCRLF與SafeCRLF換行符問題Git
- Hive之儲存格式Hive
- 儲存控制器自動切換問題
- excel表裡分隔符替換為製表符的操作方法Excel
- 儲存過程訪問其他使用者的表的問題儲存過程
- oracle中去掉文字中的換行符、回車符、製表符Oracle
- django儲存資料到表時,遇到字符集問題--已解決Django
- CHARINDEX、表中有製表符、換行符、回車符的查詢和取消掉的方法Index
- linux下的製表符和換行Linux
- js中的儲存問題JS
- mysql 轉換表的儲存引擎指令碼MySql儲存引擎指令碼
- hive檔案儲存格式Hive
- Hive之 資料儲存Hive
- MyISAM表的儲存格式---行格式
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 雲端儲存是未來,只是時間問題
- 將FileSystem轉換為ASM儲存ASM
- oracle中去掉文字中的換行符、回車符、製表符小結Oracle
- 儲存過程問題。。儲存過程
- 掌握Hive資料儲存模型Hive模型
- Word文件儲存時常遇到的問題及其解決方
- js將文字框的內容回車換行符轉換為<br/>換行JS
- 為儲存再更換一塊硬碟硬碟
- 【MYSQL】一個關於Innodb儲存引擎表的加鎖問題MySql儲存引擎
- sqlserver查詢一張表所有欄位是否含製表符、換行符、回車符SQLServer
- 行為儲存過程(23)儲存過程
- 關於Oracle建立儲存過程時,訪問不同Schema下的表報錯:ORA-00942的問題Oracle儲存過程
- 一個儲存過程的問題!儲存過程
- Vector儲存物件的一個問題物件
- Hive簡易教程 - 資料儲存Hive
- 【問題處理】使用trim和 replace處理字串中的換行符號字串符號
- 【換行符】Windows、Unix、Mac不同作業系統的回車符 和換行符 WindowsMac作業系統
- [Hive]建表例項與引數解釋——自定義表的儲存格式(textfile、sequencefile、refile)Hive
- JSF的outputText時,無法處理換行問題JS