Pyspark - 多列上的聚合

Moh*_*han 8 python python-2.7 apache-spark 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)

zer*_*323 21

  1. 按照自述文件中的说明进行spark-csv包装
  2. 加载数据

    df = (sqlContext.read
        .format("com.databricks.spark.csv")
        .options(inferSchema="true", delimiter=";", header="true")
        .load("babynames.csv"))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 导入所需的功能

    from pyspark.sql.functions import count, avg
    
    Run Code Online (Sandbox Code Playgroud)
  4. 分组和汇总(可选使用Column.alias:

    df.groupBy("year", "sex").agg(avg("percent"), count("*"))
    
    Run Code Online (Sandbox Code Playgroud)

另外:

  • 强制转换percent为数字
  • 重塑为格式((year,sex),percent)
  • aggregateByKey 运用 pyspark.statcounter.StatCounter