[英]Trailing newline in file when reading JSON in Pyspark results in empty line
使用Pyspark將JSON數據從S3加載到AWS EMR上的AWS EMR上的Spark(v2.4.2)中時,我注意到文件中的尾部分隔符(\\ n)導致在數據框的末尾創建一個空行。 因此,其中包含10,000行的文件將產生一個具有10,001行的數據幀,最后一行為空/全空。
該文件如下所示:
{line of JSON}\n
{line of JSON}\n
... <-- 9996 similar lines
{line of JSON}\n
{line of JSON}\n
JSON本身沒有換行符,即,我不需要將JSON讀為多行。 我正在使用以下Pyspark命令閱讀它:
df = spark.read.json('s3://{bucket}/{filename}.json.gz')
df.count()
-> 10001
我對http://jsonlines.org/上這句話的理解:
文件中的最后一個字符可能是行分隔符,將與沒有行分隔符一樣對待。
...是不應考慮最后一個空行。 我想念什么嗎? 在SO或其他地方,我還沒有看到其他任何人遇到此問題,但是在實踐中似乎很明顯。 我沒有在Spark Python API文檔中看到抑制空行的選項,也無法通過嘗試不同的行分隔符並在load命令中指定它們來解決該問題。
我已經驗證了刪除最后的行分隔符會導致數據幀具有正確的行數。
我發現了問題。 我上傳的文件具有意外的編碼(UCS-2 LE BOM而不是UTF-8)。 我本來應該檢查一下的,但是沒有。 在將編碼切換為預期的編碼(UTF-8)之后,負載按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.