【发布时间】:2018-01-24 16:10:21
【问题描述】:
来自这个数据框
+-----+-----------------+
|store| values |
+-----+-----------------+
| 1|[1, 2, 3,4, 5, 6]|
| 2| [2,3]|
+-----+-----------------+
我想应用Counter 函数来得到这个:
+-----+------------------------------+
|store| values |
+-----+------------------------------+
| 1|{1:1, 2:1, 3:1, 4:1, 5:1, 6:1}|
| 2|{2:1, 3:1} |
+-----+------------------------------+
我使用另一个问题的答案得到了这个数据框:
GroupBy and concat array columns pyspark
所以我尝试修改答案中的代码,如下所示:
选项 1:
def flatten_counter(val):
return Counter(reduce (lambda x, y:x+y, val))
udf_flatten_counter = sf.udf(flatten_counter, ty.ArrayType(ty.IntegerType()))
df3 = df2.select("store", flatten_counter("values2").alias("values3"))
df3.show(truncate=False)
选项 2:
df.rdd.map(lambda r: (r.store, r.values)).reduceByKey(lambda x, y: x + y).map(lambda row: Counter(row[1])).toDF(['store', 'values']).show()
但它不起作用。
有人知道我该怎么做吗?
谢谢
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql counter