【问题标题】:GroupByKey and create lists of values pyspark sql dataframeGroupByKey 并创建值列表 pyspark sql 数据框
【发布时间】:2017-02-20 12:57:23
【问题描述】:

所以我有一个如下所示的 spark 数据框:

a | b | c
5 | 2 | 1
5 | 4 | 3
2 | 4 | 2
2 | 3 | 7

我想按列 a 分组,从列 b 创建一个值列表,然后忘记 c。输出数据框将是:

a | b_list
5 | (2,4)
2 | (4,3)

我将如何使用 pyspark sql 数据框执行此操作?

谢谢! :)

【问题讨论】:

    标签: apache-spark group-by spark-dataframe pyspark-sql


    【解决方案1】:

    以下是获取该 Dataframe 的步骤。

    >>> from pyspark.sql import functions as F
    >>>
    >>> d = [{'a': 5, 'b': 2, 'c':1}, {'a': 5, 'b': 4, 'c':3}, {'a': 2, 'b': 4, 'c':2}, {'a': 2, 'b': 3,'c':7}]
    >>> df = spark.createDataFrame(d)
    >>> df.show()
    +---+---+---+
    |  a|  b|  c|
    +---+---+---+
    |  5|  2|  1|
    |  5|  4|  3|
    |  2|  4|  2|
    |  2|  3|  7|
    +---+---+---+
    
    >>> df1 = df.groupBy('a').agg(F.collect_list("b"))
    >>> df1.show()
    +---+---------------+
    |  a|collect_list(b)|
    +---+---------------+
    |  5|         [2, 4]|
    |  2|         [4, 3]|
    +---+---------------+
    

    【讨论】:

    • @user2253546 你可以阅读文档。这里spark.apache.org/docs/1.6.2/api/java/org/apache/spark/sql/…,很多有用的SQL函数。
    • 在大型数据帧上执行此操作时,collect_set 似乎没有让我得到正确的组值。我认为这是因为 Null 组,但是在自定义创建的组上尝试它时,不是这样。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多