【问题标题】:How can I compare rows of data in an array based on distinct attributes of a column?如何根据列的不同属性比较数组中的数据行?
【发布时间】:2021-03-12 21:37:51
【问题描述】:

我在 spark 中有一个棘手的学生作业。我需要为这种数组编写一个 SQL 查询:

+--------+------------+-------+
| Gender | Department | Loans |
+--------+------------+-------+
| Male   | Maths      |  1200 |
| Female | Maths      |  1500 |
+--------+------------+-------+

有更多的部门,因此每个部门都有男性和女性的贷款。 如何计算每个部门的女性贷款多于男性贷款的新数组,并仅打印/显示女性贷款多于男性贷款的部门?

【问题讨论】:

    标签: sql scala apache-spark apache-spark-sql


    【解决方案1】:

    您可以按部门分组、旋转性别列并过滤female > male 所在的结果。下面是一个 PySpark 解决方案,但 Scala 的解决方案应该是相同的,除了创建数据框的部分。

    df = spark.createDataFrame([
        ['Male', 'Maths', 1200],
        ['Female', 'Maths', 1500],
        ['Male', 'Physics', 1800],
        ['Female', 'Physics', 1500]
    ]).toDF('Gender', 'Department', 'Loans')
    
    df.show()
    +------+----------+-----+
    |Gender|Department|Loans|
    +------+----------+-----+
    |  Male|     Maths| 1200|
    |Female|     Maths| 1500|
    |  Male|   Physics| 1800|
    |Female|   Physics| 1500|
    +------+----------+-----+
    
    grouped = df.groupBy("Department").pivot("Gender").sum("Loans")
    grouped.show()
    +----------+------+----+
    |Department|Female|Male|
    +----------+------+----+
    |   Physics|  1500|1800|
    |     Maths|  1500|1200|
    +----------+------+----+
    
    more_female = grouped.filter("Female > Male")
    more_female.show()
    +----------+------+----+
    |Department|Female|Male|
    +----------+------+----+
    |     Maths|  1500|1200|
    +----------+------+----+
    

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      相关资源
      最近更新 更多