我有一个pyspark 2.0.1。我正在尝试按数据帧分组,并从数据帧中检索所有字段的值。我发现了
z=data1.groupby('country').agg(F.collect_list('names'))
将给出country&;names属性的值&;for names属性将给出列标题为collect_list(names)
。但对于我的工作,我的dataframe大约有15列,我将运行一个循环,每次循环内需要所有剩余字段的输出时,都将更改groupby字段。您能建议我如何使用collect_list()或任何其他pyspark函数吗?
我也试过这个密码
from pyspark.sql import functions as F
fieldnames=data1.schema.names
names1= list()
for item in names:
if item != 'names':
names1.append(item)
z=data1.groupby('names').agg(F.collect_list(names1))
z.show()
但收到错误信息
Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.collect_list. Trace: py4j.Py4JException: Method collect_list([class java.util.ArrayList]) does not exist
使用struct在调用groupBy之前组合列
假设您有一个数据帧
只能对单个列执行聚合操作。
在聚合之后,您可以收集结果并对其进行迭代以分离组合的列,从而生成索引dict 用于分隔组合列的udf。
实际上我们可以在Pyspark2.2中完成。
首先,我们需要创建一个常量列(“Temp”),groupBy与该列(“Temp”)并应用agg by pass iterable*exprs,collect_list的表达式在其中存在。
下面是代码:
输入数据:
输出数据:
相关问题 更多 >
编程相关推荐