簡體   English   中英

在Pyspark中讀取JSON時在文件中尾隨換行符導致空行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM