相关疑难解决方法(0)

使用Spark中的自定义函数聚合多个列

我想知道是否有某种方法可以为多列上的spark数据帧指定自定义聚合函数.

我有一个类似这样的表(名称,项目,价格):

john | tomato | 1.99
john | carrot | 0.45
bill | apple  | 0.99
john | banana | 1.29
bill | taco   | 2.59
Run Code Online (Sandbox Code Playgroud)

至:

我想将每个人的项目和成本汇总到这样的列表中:

john | (tomato, 1.99), (carrot, 0.45), (banana, 1.29)
bill | (apple, 0.99), (taco, 2.59)
Run Code Online (Sandbox Code Playgroud)

这在数据帧中是否可行?我最近了解到collect_list它,但它似乎只适用于一个专栏.

scala dataframe apache-spark apache-spark-sql orc

32
推荐指数
4
解决办法
2万
查看次数

Apache Spark Dataframe Groupby agg()用于多列

我有DataFrame3列,即Id, First Name, Last Name

我想申请GroupBy的基础上,Id并希望收集First Name, Last Name列作为列表.

示例: - 我有这样的DF

+---+-------+--------+
|id |fName  |lName   |
+---+-------+--------+
|1  |Akash  |Sethi   |
|2  |Kunal  |Kapoor  |
|3  |Rishabh|Verma   |
|2  |Sonu   |Mehrotra|
+---+-------+--------+
Run Code Online (Sandbox Code Playgroud)

我希望我的输出像这样

+---+-------+--------+--------------------+
|id |fname           |lName               |
+---+-------+--------+--------------------+
|1  |[Akash]         |[Sethi]             |
|2  |[Kunal, Sonu]   |[Kapoor, Mehrotra]  |
|3  |[Rishabh]       |[Verma]             |
+---+-------+--------+--------------------+
Run Code Online (Sandbox Code Playgroud)

提前致谢

scala apache-spark spark-dataframe

12
推荐指数
1
解决办法
7555
查看次数

如何使用pyspark collect_list函数检索所有列

我有一个pyspark 2.0.1。我正在尝试对数据框进行分组并从我的数据框中检索所有字段的值。我找到

z=data1.groupby('country').agg(F.collect_list('names')) 
Run Code Online (Sandbox Code Playgroud)

将为我提供国家/地区名称属性和名称属性的值,它将列标题为collect_list(names)。但是对于我的工作,我有大约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() 
Run Code Online (Sandbox Code Playgroud)

但收到错误消息

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 
Run Code Online (Sandbox Code Playgroud)

python pyspark

2
推荐指数
1
解决办法
6826
查看次数