Pyspark数据框-在两列中获取变量计数

时间:2019-08-28 23:23:17

标签: python pyspark pyspark-dataframes

我正在使用pyspark数据帧,目标是获取可以在多列中的变量的计数。编写了一个SQL查询来获取此查询,但无法将其转换为数据帧。

鉴于以下数据框,需要在Col1,Col2中获得“ Foo”,“ Bar”,“ Air”的计数。

+----------+----+-----+
|      ID  |Col1|Col2 |
+----------+----+-----+
|2017-01-01| Air| Foo |
|2017-01-02| Foo|  Bar|
|2017-01-03| Bar| Air |
|2017-01-04| Air|  Foo|
|2017-01-09| Bar|  Foo|
|2017-01-01|Foo |  Bar|
|2017-01-02|Bar |  Air|
|2017-01-01|Foo |  Air|
|2017-01-02|Foo |  Air|
+----------+----+-----+

预期产量

+-------+-----+
|Var .  |Count|
+-------+-----+
|    Foo|  7  |
|    Air|  6  |
|    Bar|  5  |
+-------+-----+

1 个答案:

答案 0 :(得分:1)

尝试一下:

创建DataFrame

import pyspark.sql.functions as f

l1 = [('2017-01-01','Air','Foo'),
('2017-01-02','Foo','Bar'),
('2017-01-03','Bar','Air'),
('2017-01-04','Air','Foo'),
('2017-01-09','Bar','Foo'),
('2017-01-01','Foo','Bar'),
('2017-01-02','Bar','Air'),
('2017-01-01','Foo','Air'),
('2017-01-02','Foo','Air')]

df = spark.createDataFrame(l1).toDF('id', 'col1', 'col2')
df.show()
+----------+----+----+
|        id|col1|col2|
+----------+----+----+
|2017-01-01| Air| Foo|
|2017-01-02| Foo| Bar|
|2017-01-03| Bar| Air|
|2017-01-04| Air| Foo|
|2017-01-09| Bar| Foo|
|2017-01-01| Foo| Bar|
|2017-01-02| Bar| Air|
|2017-01-01| Foo| Air|
|2017-01-02| Foo| Air|
+----------+----+----+

第一个concat col1col2,作为分隔符。用,分隔列,然后爆炸将为每个单词给出行。

df.withColumn('col', f.explode(f.split(f.concat('col1',f.lit(','),'col2'),','))).groupBy('col').count().show()
+---+-----+
|col|count|
+---+-----+
|Bar|    5|
|Foo|    7|
|Air|    6|
+---+-----+