【问题标题】: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|
+----------+------+----+