繁体   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