java - 如何在spark中进行分组

标签 java apache-spark

我有以下数据样本数据,但在现实生活中这个数据集很大。

A B 1-1-2018  10
A B 2-1-2018  20
C D 1-1-2018  15
C D 2-1-2018  25 

我需要使用日期对上述数据进行分组并生成 key 对值

1-1-2018->key
-----------------
A B 1-1-2018  10 
C D 1-1-2018  15 

2-1-2018->key
-----------------
A B 2-1-2018  20
C D 2-1-2018  25 

谁能告诉我如何在 Spark 中以最佳优化方式做到这一点(如果可能的话使用 java)

最佳答案

不是Java,但看看上面的代码,您似乎想按 Key 递归地将数据帧设置为子组。我知道如何做到这一点的最好方法是使用 while 循环,但这并不是地球上最简单的方法。

//You will also need to import all DataFrame and Array data types in Scala, don't know if you need to do it for Java for the below code.

//Inputting your DF, with columns as Value_1, Value_2, Key, Output_Amount
val inputDF = //DF From above

//Need to get an empty DF, I just like doing it this way
val testDF = spark.sql("select 'foo' as bar")

var arrayOfDataFrames = Array[DataFrame] = Array(testDF)

val arrayOfKeys = inputDF.selectExpr("Key").distinct.rdd.map(x=>x.mkString).collect

var keyIterator = 1

//Need to overwrite the foo bar first DF
arrayOfDataFrames = Array(inputDF.where($""===arrayOfKeys(keyIterator - 1)))
keyIterator = keyIterator + 1

//loop through find the key and place it into the DataFrames array
while(keyIterator <= arrayOfKeys.length) {
  arrayOfDataFrames = arrayOfDataFrames ++ Array(inputDF.where($"Key"===arrayOfKeys(keyIterator - 1)))
  keyIterator = keyIterator + 1
}

在命令末尾,您将有两个相同长度的数据帧和匹配的键的数组。这意味着如果您选择键的第三个元素,它将与数据帧的第三个元素匹配。

由于这不是 Java 并且不能直接回答您的问题,因此这是否至少有助于将您推向可能有帮助的方向(我在 Spark Scala 中构建了它)。

关于java - 如何在spark中进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57873011/

相关文章:

java - 松耦合 : Can we use Interfaces when we need cloneables params?

scala - 在 Spark 中强制立即缓存的最有效方法是什么?

r - 使用sparklyr::spark_read_json时添加文件名

Java泛型类型继承错误

java - 如何避免在 Java 和 native C++ 代码之间复制数据

regex - 悬空元字符 * spark sql

scala - 在 Spark 中创建多个字段的行数据框

apache-spark - Snappydata 和外部 Hive 兼容性

java - 如何在不向用户显示堆栈跟踪的情况下处理 servlet 过滤器中的错误状态?

java - GUI 测试应该以默认外观运行吗?