【发布时间】:2016-07-10 10:01:58
【问题描述】:
可以使用点符号访问 PySpark Row 元素:给定 r= Row(name="Alice", age=11),可以分别使用 r.name 或 r.age 获取名称或年龄。当需要获取名称存储在变量element 中的元素时会发生什么?一种选择是使用r.toDict()[element]。但是,考虑一种情况,我们有一个很大的DataFrame,并且我们希望在该数据帧的每一行上映射一个函数。我们当然可以做类似的事情
def f(row, element1, element2):
row = row.asDict()
return ", ".join(str(row[element1]), str(row[element2]))
result = dataframe.map(lambda row: f(row, 'age', 'name'))
然而,在每一行上调用toDict() 似乎效率很低。有没有更好的办法?
【问题讨论】:
-
> 也许是
filter你能举个例子吗,我不知道如何使用filter。 -
对不起我的错误,但是我的小解释的第二部分是正确的。
map是最快的作业之一,因为它很容易并行化。 -
我知道
map很好。我想让它变得更好,但不必将每一行都转换为字典 -
抱歉打错了。我想让它变得更好 BY 不必将每一行都转换为字典
标签: python apache-spark pyspark