【发布时间】:2018-11-01 09:50:53
【问题描述】:
我是 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|
+---+
谁能告诉我为什么 PySpark 中的 toDF() 函数既像动作又像转换?非常感谢。
PS:在 Scala 中,在我的例子中,toDF 的作用类似于转换。
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql rdd