gpt4 book ai didi

apache-spark - pyspark 的 toDF() 与 createDataFrame() 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 14:32:34 24 4
gpt4 key购买 nike

我是初学者,刚开始使用spark。我在 pySpark (Scala 2.11.8) 中执行了以下查询

dic = [{"a":1},{"b":2},{"c":3}]

spark.parallelize(dic).toDF()
df.show()

然后产生:

+----+                                                                          
| a|
+----+
| 1|
|null|
|null|
+----+

而当我执行 spark.createDataFrame(dic).show() 时它会产生

+----+----+----+                                                                
| a| b| c|
+----+----+----+
| 1|null|null|
|null| 2|null|
|null|null| 3|
+----+----+----+

基于 Unable to use rdd.toDF() but spark.createDataFrame(rdd) Works似乎 toDF() 是 createDataFrame 的语法糖,但该帖子并未详细说明内部发生的情况导致了差异。只是想知道是否有人可以解释上述结果背后的原因。

谢谢!

最佳答案

首先 - 如果您检查日志,您将看到以下警告:

UserWarning: inferring schema from dict is deprecated,please use pyspark.sql.Row instead warnings.warn("inferring schema from dict is deprecated,

这是有原因的。

对观察到的行为的解释很简单——本地集合的模式推理逻辑不同(我们可以安全地假设我们可以在可忽略的时间内扫描所有记录)和 RDD(这个假设必然为真)。

后者使用 _inferSchema,它对数据进行采样以进行推理。如果未提供采样率,it uses only the first row .相反,对于本地集合,Spark scans all records .

这里要注意的是要阅读警告而不是依赖模式推断(这通常是不可靠且昂贵的)。

关于apache-spark - pyspark 的 toDF() 与 createDataFrame() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com