相关疑难解决方法(0)

Spark SQL:将聚合函数应用于列列表

有没有办法将聚合函数应用于数据帧的所有(或列表)列groupBy?换句话说,有没有办法避免为每一列执行此操作:

df.groupBy("col1")
  .agg(sum("col2").alias("col2"), sum("col3").alias("col3"), ...)
Run Code Online (Sandbox Code Playgroud)

aggregate-functions dataframe apache-spark apache-spark-sql

65
推荐指数
2
解决办法
12万
查看次数

Pyspark - 多列上的聚合

我有如下数据.文件名:babynames.csv.

year    name    percent     sex
1880    John    0.081541    boy
1880    William 0.080511    boy
1880    James   0.050057    boy
Run Code Online (Sandbox Code Playgroud)

我需要根据年份和性别对输入进行排序,我希望输出汇总如下(此输出将分配给新的RDD).

year    sex   avg(percentage)   count(rows)
1880    boy   0.070703         3
Run Code Online (Sandbox Code Playgroud)

我不确定如何在pyspark中执行以下步骤.需要你的帮助

testrdd = sc.textFile("babynames.csv");
rows = testrdd.map(lambda y:y.split(',')).filter(lambda x:"year" not in x[0])
aggregatedoutput = ????
Run Code Online (Sandbox Code Playgroud)

python python-2.7 apache-spark pyspark

8
推荐指数
1
解决办法
3万
查看次数

为什么PySpark中的agg()一次只能汇总一列?

对于以下数据帧

df=spark.createDataFrame(data=[('Alice',4.300),('Bob',7.677)],schema=['name','High'])
Run Code Online (Sandbox Code Playgroud)

当我试图找到最小值和最大值时,我只输出最小值.

df.agg({'High':'max','High':'min'}).show()
Run Code Online (Sandbox Code Playgroud)
+-----------+
|min(High)  |
+-----------+
|    2094900|
+-----------+
Run Code Online (Sandbox Code Playgroud)

为什么agg()不能像熊猫一样给出最大和最小?

python apache-spark apache-spark-sql pyspark pyspark-sql

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

Pyspark:如何计算单个群组的平均和计数?

我想计算平均值,并在Pyspark中按语句归为一组。我怎样才能做到这一点?

df = spark.createDataFrame([(1, 'John', 1.79, 28,'M', 'Doctor'),
                        (2, 'Steve', 1.78, 45,'M', None),
                        (3, 'Emma', 1.75, None, None, None),
                        (4, 'Ashley',1.6, 33,'F', 'Analyst'),
                        (5, 'Olivia', 1.8, 54,'F', 'Teacher'),
                        (6, 'Hannah', 1.82, None, 'F', None),
                        (7, 'William', 1.7, 42,'M', 'Engineer'),
                        (None,None,None,None,None,None),
                        (8,'Ethan',1.55,38,'M','Doctor'),
                        (9,'Hannah',1.65,None,'F','Doctor')]
                       , ['Id', 'Name', 'Height', 'Age', 'Gender', 'Profession'])
Run Code Online (Sandbox Code Playgroud)

#这仅显示平均值,但我需要在其旁边计数。我怎样才能做到这一点?

df.groupBy("Profession").agg({"Age":"avg"}).show()
df.show()
Run Code Online (Sandbox Code Playgroud)

谢谢。

group-by average count pyspark

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

如何在Spark中一次对多个列进行聚合

我有一个包含多列的数据框.我希望按其中一个列进行分组,并将其他列聚合一次.假设该表有4列,cust_id,f1,f2,f3,我想通过cust_id进行分组,然后获得avg(f1),avg(f2)和avg(f3).该表将包含许多列.任何提示?

下面的代码是一个好的开始,但由于我有很多列,手动编写它们可能不是一个好主意.

df.groupBy("cust_id").agg(sum("f1"), sum("f2"), sum("f3"))
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

3
推荐指数
1
解决办法
6897
查看次数

如何将不同的聚合函数应用于同一列为什么要对 Spark 数据帧进行分组?

要使用 pyspark 按 Spark 数据帧进行分组,我使用如下命令:

df2 = df.groupBy('_c1','_c3').agg({'_c4':'max', '_c2' : 'avg'})
Run Code Online (Sandbox Code Playgroud)

结果我得到这样的输出:

+-----------------+-------------+------------------+--------+                   
|              _c1|          _c3|          avg(_c2)|max(_c4)|
+-----------------+-------------+------------------+--------+
|        Local-gov|      HS-grad| 644952.5714285715|       9|
|        Local-gov|   Assoc-acdm|365081.64285714284|      12|
|     Never-worked| Some-college|          462294.0|      10|
|        Local-gov|    Bachelors|         398296.35|      13|
|      Federal-gov|      HS-grad|          493293.0|       9|
|          Private|         12th| 632520.5454545454|       8|
|        State-gov|    Assoc-voc|          412814.0|      11|
|                ?|      HS-grad| 545870.9230769231|       9|
|          Private|  Prof-school|340322.89130434784|      15|
+-----------------+-------------+------------------+--------+
Run Code Online (Sandbox Code Playgroud)

这很好,但有两件事我想念:

  1. 我想控制列的名称。例如,我想要命名一个新avg_c2avg(_c2)
  2. 我想以不同的方式聚合同一列。例如,我可能想知道 column 的最小值和最大值_c4。我尝试了以下方法,但它不起作用:

    df2 = df.groupBy('_c1','_c3').agg({'_c4':('min','max'), '_c2' : 'avg'})

有办法实现我所需要的吗?

group-by apache-spark pyspark

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

Spark Dataframe groupBy with sequence as keys arguments

我有一个spark dataFrame,我想通过多个键聚合值

正如Spark文档所示:

高清GROUPBY(COL1:字符串的cols:字符串*):GroupedData组使用指定的列数据框,这样我们就可以在上面运行聚集

所以我做了以下几点

 val keys = Seq("a", "b", "c")
 dataframe.groupBy(keys:_*).agg(...)
Run Code Online (Sandbox Code Playgroud)

Intellij Idea会引发以下错误:

  1. 扩展非重复参数
  2. 类型不匹配:预期Seq [Column],实际Seq [String]

但是,我可以手动传递多个参数而不会出现错误:

dataframe.groupBy("a", "b", "c").agg(...)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:我如何以编程方式执行此操作?

scala apache-spark apache-spark-sql

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