我处理一个包含两列mvv和count的数据帧.
+---+-----+
|mvv|count|
+---+-----+
| 1 | 5 |
| 2 | 9 |
| 3 | 3 |
| 4 | 1 |
Run Code Online (Sandbox Code Playgroud)
我想获得两个包含mvv值和计数值的列表.就像是
mvv = [1,2,3,4]
count = [5,9,3,1]
Run Code Online (Sandbox Code Playgroud)
所以,我尝试了以下代码:第一行应该返回一个python列表行.我想看到第一个值:
mvv_list = mvv_count_df.select('mvv').collect()
firstvalue = mvv_list[0].getInt(0)
Run Code Online (Sandbox Code Playgroud)
但是我收到第二行的错误消息:
AttributeError:getInt
可以Row使用点符号来访问PySpark 元素:给定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'))
Run Code Online (Sandbox Code Playgroud)
但是,似乎toDict()每一行的调用效率都非常低。有没有更好的办法?