Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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
Java Spark:以行列表的形式获取groupBy输出_Java_Apache Spark_Spark Streaming_Spark Structured Streaming - Fatal编程技术网

Java Spark:以行列表的形式获取groupBy输出

Java Spark:以行列表的形式获取groupBy输出,java,apache-spark,spark-streaming,spark-structured-streaming,Java,Apache Spark,Spark Streaming,Spark Structured Streaming,在spark中使用group by时,是否可以获取Dataset 作为输出。这里的行是原始行 Dataset<<List<Row>> output = dataset.groupBy("key"); 请告知是否有方法在不使用POJO的情况下将输出作为Dataset。(例如,基于pojo的解决方案:FlatMapGroupsWIthStateFunction)我为您准备了一个解决方案的开头。您可以使用单调递增\u id创建索引并“记住”数据帧的顺序。然后,您可以按键

在spark中使用group by时,是否可以获取
Dataset

作为输出。这里的行是原始行

Dataset<<List<Row>> output = dataset.groupBy("key");

请告知是否有方法在不使用POJO的情况下将输出作为
Dataset
。(例如,基于pojo的解决方案:
FlatMapGroupsWIthStateFunction

我为您准备了一个解决方案的开头。您可以使用
单调递增\u id
创建索引并“记住”数据帧的顺序。然后,您可以按键分组,使用
collect_list
聚合结果,按索引对列表排序,最后将其删除

SparkSQL中存在一个排序数组的
sort_array
函数。不幸的是,我不知道在sparkSQL数组上有任何等价的
map
函数来删除索引。这就是我提出基于UDF的解决方案的原因:

//按索引“i”排序并保留值的UDF
val sort_和_strip=udf{(x:WrappedArray[Row])=>
x、 sortBy(u.getAs[Long](“i”))
.map(u.getAs[Long](“value”))
}
//使用示例:
火花点火范围(7)
.选择('id%3作为“键”,id作为“值”)
.带列(“i”,单调递增)
.groupBy(“关键”)
.agg(收集列表(结构('i,'值))作为“列表”)
.withColumn(“列表”、sort_和_strip(“列表))
.show(假)
+---+---------+
|键|列表|
+---+---------+
|0  |[0, 3, 6]|
|1  |[1, 4]   |
|2  |[2, 5]   |
+---+---------+

我有一个解决方案的开始。您可以使用
单调递增\u id
创建索引并“记住”数据帧的顺序。然后,您可以按键分组,使用
collect_list
聚合结果,按索引对列表排序,最后将其删除

SparkSQL中存在一个排序数组的
sort_array
函数。不幸的是,我不知道在sparkSQL数组上有任何等价的
map
函数来删除索引。这就是我提出基于UDF的解决方案的原因:

//按索引“i”排序并保留值的UDF
val sort_和_strip=udf{(x:WrappedArray[Row])=>
x、 sortBy(u.getAs[Long](“i”))
.map(u.getAs[Long](“value”))
}
//使用示例:
火花点火范围(7)
.选择('id%3作为“键”,id作为“值”)
.带列(“i”,单调递增)
.groupBy(“关键”)
.agg(收集列表(结构('i,'值))作为“列表”)
.withColumn(“列表”、sort_和_strip(“列表))
.show(假)
+---+---------+
|键|列表|
+---+---------+
|0  |[0, 3, 6]|
|1  |[1, 4]   |
|2  |[2, 5]   |
+---+---------+
对于任何分布式大型数据集问题,我甚至可以说“不能保证有序”是正确的。您希望对聚合值应用什么顺序?为什么不使用任何标准函数呢?我甚至可以说,对于任何分布式大型数据集问题,一般来说“不能保证有序”是正确的。您希望对聚合值应用什么顺序?为什么不使用任何标准函数?
+-----+----------------------------+
|item1|set                         |
+-----+----------------------------+
|1    |[[5,3], [4,1], [3,2], [2,2]]|
|2    |[[4,1], [1,2], [5,2], [3,1]]|
+-----+----------------------------+