目前正在研究 PySpark。 DataFrame
上没有 map 功能,一个必须去RDD
为 map
功能。在 Scala 中有一个 map
在 DataFrame
,这有什么原因吗?
最佳答案
Dataset.map
不属于 DataFrame
( Dataset[Row]
) API。它转换强类型 Dataset[T]
进入强类型 Dataset[U]
:
def map[U](func: (T) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]
并且在强类型
Dataset
中根本没有 Python 的位置世界。一般来说,Datasets
是原生 JVM 对象(与 RDD
不同,它没有 Python 特定的实现),它们严重依赖丰富的 Scala 类型系统(甚至 Java API 也受到严重限制)。即使 Python 实现了 Encoder
的某些变体API,数据仍需转换为 RDD
用于计算。相比之下,Python 实现了自己的
map
类似于矢量化 udfs 的机制,应该在 Spark 2.3 中发布。它专注于与 Pandas API 相结合的高性能 serde 实现。这包括典型的
udfs
(特别是 SCALAR
和 SCALAR_ITER
变体)以及类似 map 的变体 - GROUPED_MAP
和 MAP_ITER
通过 GroupedData.apply
申请和 DataFrame.mapInPandas
(Spark >= 3.0.0) 分别。
关于apache-spark - 为什么 pyspark 中没有数据帧的映射函数,而 spark 等价物有它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47343815/