【问题标题】:Pyspark dataframe - get count of variable in two columnsPyspark数据框 - 获取两列中的变量计数
【发布时间】:2019-08-28 23:23:17
【问题描述】:

我正在使用 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  |
+-------+-----+

【问题讨论】:

    标签: python pyspark pyspark-dataframes


    【解决方案1】:

    试试这个:

    创建数据框

    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|
    +----------+----+----+
    
    

    首先将col1col2, 作为分隔符。按, 拆分列,然后explode 将为每个单词提供行。

    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|
    +---+-----+
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2020-01-08
      相关资源
      最近更新 更多