PySpark RDD 对多个字段进行groupByKey

Rdd的groupByKey是对(key, value)形式的数据

可有时我需要对多个字段进行group操作该如何进行呢 比如(‘2019-01-01’, ‘1’, 1)这样的,对前两个字段进行groupByKey,我们这里将第一个字段名为day_date,第二个gid,第三个num

  1. 当然可以将rdd变成dataframe然后直接groupBy(‘day_date’, ‘gid’) 但是感觉有点麻烦,而且原来的rdd是从cache中读取的
  2. 突然想到pandas的透视表里index可以是一个元组,那么pyspark既然是(key,value)的形式,那我直接把需要gourp的多个字段 map成一个元组作为key不就好了吗!
df1.rdd.map(lambda x: ((x.day_date, x.gid), x.num)).collect()
df1.rdd.map(lambda x: ((x.day_date, x.gid), x.num)).reduceByKey(lambda x, y: x+y).collect()

PySpark RDD 对多个字段进行groupByKey_第1张图片
PySpark RDD 对多个字段进行groupByKey_第2张图片

哈哈 结果很完美!

你可能感兴趣的:(Spark,python)