Pyspark - 多列聚合

24
我有以下数据。文件名:babynames.csv。
year    name    percent     sex
1880    John    0.081541    boy
1880    William 0.080511    boy
1880    James   0.050057    boy

我需要按照年份和性别对输入进行排序,并且希望输出聚合如下(此输出将被分配给新的RDD)。

year    sex   avg(percentage)   count(rows)
1880    boy   0.070703         3

在pyspark中,我不确定如何在以下步骤之后继续操作。需要您的帮助。

testrdd = sc.textFile("babynames.csv");
rows = testrdd.map(lambda y:y.split(',')).filter(lambda x:"year" not in x[0])
aggregatedoutput = ????
1个回答

52
  1. 根据README的说明,包含spark-csv package
  2. 加载数据

df = (sqlContext.read
    .format("com.databricks.spark.csv")
    .options(inferSchema="true", delimiter=";", header="true")
    .load("babynames.csv"))
  • 导入所需的函数

  • from pyspark.sql.functions import count, avg
    
  • 按组并聚合(可选择使用Column.alias):

    df.groupBy("year", "sex").agg(avg("percent"), count("*"))
    
  • 或者:

    • percent转换为数字
    • 转换为格式 ((year, sex), percent)
    • 使用pyspark.statcounter.StatCounter进行aggregateByKey

    SparkSQL: 对列的列表应用聚合函数在一个 Spark 数据框的同一列上执行多个聚合操作。 - zero323

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接