繁体   English   中英

如何将行转换为数据集<Row>在火花Java

[英]How to convert Row to Dataset<Row> in spark Java

我正在使用ForeachFunction迭代Dataset<Row>而在迭代中我不知道如何将一些自定义列附加到 Row 并将其附加到ForeachFunction Java 中的另一个Dataset<Row>

代码:

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;

});

我已经尝试了很多,但我无法解决它。

谢谢!

不应直接修改行(可以但不方便)。 在操作数据帧(行数据集)时,您应该使用 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|
+---+---+---+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM