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|
±-------+
相關文章
- MySQL 儲存過程進行切換表MySql儲存過程
- 解決MongoDB儲存時間時差的問題MongoDB
- grep 匹配製表符 和 換行符
- 儲存過程訪問其他使用者的表的問題儲存過程
- django儲存資料到表時,遇到字符集問題--已解決Django
- excel表裡分隔符替換為製表符的操作方法Excel
- js中的儲存問題JS
- hive檔案儲存格式Hive
- 華為雲物件儲存OBS,助力企業高效解決儲存問題物件
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- Redis儲存物件問題Redis物件
- 掌握Hive資料儲存模型Hive模型
- 使用Presto查詢hive表資料時報"Error opening Hive split hdfs"問題,及解決方法RESTHiveError
- 【換行符】Windows、Unix、Mac不同作業系統的回車符 和換行符 WindowsMac作業系統
- Linux 轉換換行符Linux
- [Hive]建表例項與引數解釋——自定義表的儲存格式(textfile、sequencefile、refile)Hive
- Kylin儲存和查詢的分片問題
- mysql多次呼叫儲存過程的問題MySql儲存過程
- [20200330]sar報表儲存時間.txt
- 關係等級儲存問題
- 關於 Swoft 2.0 版本用 Redis 儲存 session 時配置問題RedisSession
- Hive的壓縮儲存和簡單優化Hive優化
- 2、儲存容量和儲存地址空間的轉換
- 行式儲存 列式儲存
- Bash技巧:把變數賦值為換行符,判斷檔案是否以換行符結尾變數賦值
- MySQL儲存過程的許可權問題MySql儲存過程
- 儲存卡變為RAW,如何進行儲存卡資料救援
- 換行符處理
- hive的一些問題Hive
- 聚焦資料時代新儲存需求,浪潮儲存的新儲存之道
- 雲端儲存目前面臨的3個問題
- Hive 面試問題Hive面試
- PostgreSQL:表的儲存屬性SQL
- 將檔案的行結束符由 CRLF 轉換為 LF
- [20200402]sar報表儲存時間2.txt
- Hive -------- 使用mysql儲存hive後設資料,Mysql的安裝以及配置步驟HiveMySql
- 達夢儲存過程效能問題定位儲存過程
- SAS 數值儲存方式和精度問題