apache-spark - 为什么 pyspark 中没有数据帧的映射函数,而 spark 等价物有它?

标签 apache-spark pyspark

目前正在研究 PySpark。 DataFrame上没有 map 功能,一个必须去RDDmap功能。在 Scala 中有一个 mapDataFrame ,这有什么原因吗?

最佳答案

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 (特别是 SCALARSCALAR_ITER 变体)以及类似 map 的变体 - GROUPED_MAPMAP_ITER通过 GroupedData.apply 申请和 DataFrame.mapInPandas (Spark >= 3.0.0) 分别。

关于apache-spark - 为什么 pyspark 中没有数据帧的映射函数,而 spark 等价物有它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47343815/

相关文章:

python - Spark Structured Streaming - 新批处理上的空字典

python - 在 Spark 中更新数据框列

python - 用同一列的平均值填充 Pyspark 数据框列空值

scala - 使用ReduceByKey 对值列表进行分组

python - 广播变量和mapPartitions

python - Pyspark py4j PickleException : "expected zero arguments for construction of ClassDict"

python - 运行 Pyspark 程序时出现 Py4JJavaError

apache-spark - 警告 cluster.YarnScheduler : Initial job has not accepted any resources

python - Spark(pyspark)中的决策树模型如何可视化?

scala - 使用 Spark 将 csv.gz 文件转换为 Parquet