Apache spark Spark SQL查询按值分组,后跟列表
有如下表(Apache spark Spark SQL查询按值分组,后跟列表,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,有如下表(数据): color status freq red y 1 blue y 1 green y 2 预期输出:红色、蓝色1绿色2 select color , freq from data where status = 'y' group by(freq) 现在我们想得到freq=1的结果为“red,blue”,而freq=2的结果为green 如何按频率获取颜色组列表,请更正上面的sql查询 使用first(colo
数据
):
color status freq
red y 1
blue y 1
green y 2
预期输出:红色、蓝色1绿色2
select color , freq from data where status = 'y' group by(freq)
现在我们想得到freq=1
的结果为“red,blue
”,而freq=2的结果为green
如何按频率获取颜色组列表,请更正上面的sql查询
使用first(color)
时,它只返回第一种颜色,但希望所有颜色按频率分组
根据输出更正SQL查询请尝试以下操作:
import org.apache.spark.sql.functions._
import spark.implicits._
//import org.apache.spark.sql._
//import org.apache.spark.sql.types._
val df = Seq(
("green","y", 4),
("blue","n", 7),
("red","y", 7),
("yellow","y", 7),
("cyan","y", 7)
).toDF("colour", "status", "freq")
val df2 = df.where("status = 'y'")
.select($"freq", $"colour")
.groupBy("freq")
.agg(collect_list($"colour"))
df2.show(false)
返回:
+----+--------------------+
|freq|collect_list(colour)|
+----+--------------------+
|4 |[green] |
|7 |[red, yellow, cyan] |
+----+--------------------+
您的数据有freq
列,但您选择了frequency
。很抱歉输入错误。从status='y'group by(频率)所在的数据中选择颜色、频率。请根据输出更正此查询。请回答您的问题,包括您使用的实际查询、完整回溯和?谢谢。是否还有另一行绿色y 3也意味着整体绿色y 5?如果对您有利,请按照协议接受答案。如何将此数据框列(颜色)值传递给spark sql查询?例如:val out=df3.filter($“color”==df2中的color列)这里df3是另一个DataFrame我不确定,您可能需要像这里一样提出新问题并询问示例。在上面的示例中,df2包含颜色(列表)。现在,我们必须从DF中选择status(即val status=DF.filter($“color”==df2中的colorumn)。选择($“status”)。这里如何动态传递df2的颜色列这个问题是以原始格式回答的,您应该注意,这里有一个协议要遵循