PySpark数据框显示错误的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySpark数据框显示错误的值相关的知识,希望对你有一定的参考价值。

我刚刚从Pandas切换到PySpark数据框,发现在PySpark数据框中打印出相同的列会产生错误的值。这是一个例子:使用熊猫:

df_pandas=pd.read_csv("crime.csv", low_memory=False)
print(df_pandas["CRIMEID"].head(5))

Output:

1321797
1344185
1181882
1182632
1195867

而使用PySpark数据帧:

df_spark = sqlContext.read.format('csv').options(header='true', inferSchema='true').load('crime.csv')
df_spark.select("CRIMEID").show(5)

Output:

+-------+
|CRIMEID|
+-------+
|1321797|
|   null|
|   null|
|1344185|
|   null|
+-------+

我也没有丢弃任何空行。有人可以解释为什么会这样吗?我真的很感激一些帮助。

答案

这是发生了什么:

  • 当您在Pandas中读取csv时,将保留记录的顺序。并且由于pandas不是分布式的并且将所有内容保存在内存中,因此当您在pandas数据帧上调用“head”方法时,该顺序不会发生变化。因此,您获得的输出与pandas从csv读取时的顺序相同。
  • 另一方面,Spark数据框在从有序文件(例如csv)读取时也保留了顺序,但是当你在Spark数据帧上调用像'show'这样的动作方法时,会发生改组,并且由于洗牌的性质,你可能会看到返回记录的随机顺序。

在像Spark这样的分布式框架中,数据在集群中被划分和分布,肯定会发生数据的混乱。

总而言之,Spark并没有给你错误的值,只是它以随机顺序返回你的记录,这与你从熊猫中得到的不同。

以上是关于PySpark数据框显示错误的值的主要内容,如果未能解决你的问题,请参考以下文章

提取特定单元格的值并将其填充以代替 pyspark 数据框中的 NA 值

如何将 pyspark 数据框列中的值与 pyspark 中的另一个数据框进行比较

Pyspark - 基于列表中的值爆炸数据框

pyspark:比较给定列的值时从数据框中获取公共数据

pyspark 数据框为每一行获得第二低的值

使用架构详细信息创建数据框时 Dataproc 上的 Pyspark 错误