Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark SQL查询按值分组,后跟列表_Apache Spark_Apache Spark Sql - Fatal编程技术网

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的颜色列这个问题是以原始格式回答的,您应该注意,这里有一个协议要遵循