我正在使用Dataset<Row>
迭代ForeachFunction
,而在迭代中,我不知道如何在Row中添加一些自定义列并将其附加到另一个Dataset<Row>
中Java
代码:
groupedDataset.foreach((ForeachFunction<Row>) row -> {
double average = //some value
// the Row has four columns
// All I want is to have a new Dataset<Row> with specific columns
// from the Row i.e row(0),row(1),row(3) and average value
Dataset<Row> newDs = row.getString("ID"),row.getString("time"),row.getInt("value"),average;
});
我已经尝试了很多,但无法解决。
谢谢!
答案 0 :(得分:0)
行不应直接修改(可能但不方便)。在处理数据帧(行的数据集)时,应使用SparkSQL API的原因主要有两个:1.简单易用2.它允许spark对您的请求执行很多优化。
现在,这是一个看起来像您想要实现的示例。基本上,我创建了一个包含三列的数据集,并使用选择对两列的结果求平均值,并丢弃最后一列。让我知道您是否需要更多详细信息。
SparkSession spark = SparkSession.builder().getOrCreate();
Dataset<Row> data = spark
.range(10)
.select(col("id").as("id"),
col("id").cast("string").as("str"),
col("id").plus(5).as("id5") );
data.show();
Dataset<Row> result = data
.select(col("id"), col("id5"),
col("id").plus(col("id5")).divide(2).as("avg"));
result.show();
产生:
+---+---+---+
| id|str|id5|
+---+---+---+
| 0| 0| 5|
| 1| 1| 6|
| 2| 2| 7|
+---+---+---+
+---+---+---+
| id|id5|avg|
+---+---+---+
| 0| 5|2.5|
| 1| 6|3.5|
| 2| 7|4.5|
+---+---+---+