小编xki*_*ing的帖子

在 PySpark 中使用 toDF() 函数从 RDD 转换为 Dataframe 时的奇怪行为

我是 Spark 的新手。当我使用 toDF() 函数将 RDD 转换为数据帧时,它似乎计算了我之前编写的 map() 之类的所有转换函数。我想知道 PySpark 中的 toDF() 是转换还是动作。

我创建了一个简单的 RDD 并使用一个简单的函数来输出它的值,仅用于测试,并在 map() 之后使用 toDF()。结果似乎部分地运行了 map 中的函数。当我显示数据帧的结果时, toDF() 就像转换并再次输出结果。

>>> a = sc.parallelize([(1,),(2,),(3,)])
>>> def f(x):
...     print(x[0])
...     return (x[0] + 1, )
...
>>> b = a.map(f).toDF(["id"])
2
1
>>> b = a.map(f).toDF(["id"]).show()
2
1
1
2
3
+---+
| id|
+---+
|  2|
|  3|
|  4|
+---+
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么 PySpark 中的 toDF() 函数既像动作又像转换吗?非常感谢。

PS:在 Scala 中,toDF 在我的情况下就像转换一样。

python apache-spark rdd apache-spark-sql pyspark

6
推荐指数
1
解决办法
1993
查看次数

标签 统计

apache-spark ×1

apache-spark-sql ×1

pyspark ×1

python ×1

rdd ×1