目前正在研究 PySpark。没有地图功能DataFrame
,并且必须去RDD
for map
功能。在Scala中有一个map
on DataFrame
,这有什么原因吗?
Dataset.map
不属于DataFrame
(Dataset[Row]
) API。它转换强类型Dataset[T]
进入强类型Dataset[U]
:
def map[U](func: (T) ⇒ U)(implicit arg0: Encoder[U]): Dataset[U]
并且在强类型中根本没有 Python 的位置Dataset
世界。一般来说,Datasets
是本机 JVM 对象(与RDD
它没有 Python 特定的实现),它严重依赖于丰富的 Scala 类型系统(甚至 Java API 也受到严重限制)。即使Python实现了一些变体Encoder
API,数据仍然需要转换为RDD
用于计算。
相比之下,Python 实现了自己的map
类似矢量化udfs的机制,应该在Spark 2.3中发布。它专注于与 Pandas API 相结合的高性能 Serde 实现。
这包括两个典型的udfs
(尤其SCALAR
and SCALAR_ITER
变体)以及类似地图的变体 -GROUPED_MAP
and MAP_ITER
应用通过GroupedData.apply
and DataFrame.mapInPandas
(Spark >= 3.0.0) 分别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)