复制数据集中的一行并更改值

时间:2016-09-21 15:53:31

标签: java apache-spark

我的问题

在我的Java应用程序中,我需要解析一个DataSet<Row>,然后根据一个函数复制一些行,并更改重复行中一列的值。

编辑:根据地图功能,行可以重复2次或3次,每个副本的值都不同。

我尝试了什么

我们来看DataSet<Row> foo(内容已经用镶木地板文件初始化)。现在我想应用foo.flatMap(bar, ??)其中barFlatMapFunction<Row, Row>返回迭代器而??是一个我无法理解的字段,因为文档非常这种方法的信息很差。

迭代器的构造如下:

final List<Row> list = new ArrayList<Row>();
list.add(row);

final Object[] newRow = new Object[row.length()];

for (int i = 0; i<row.length();i++){
    newRow[i] = row.get(i);
}

newRow[row.fieldIndex("fieldName")] = someLong;
list.add(RowFactory.create(newRow));

return list.iterator();

我的问题

我是否以正确的方式创建迭代器?

这个神秘的编码器是什么?我应该在这个领域放些什么?

1 个答案:

答案 0 :(得分:1)

ConnectionThread文档说

  

首先将函数应用于此数据集的所有元素,然后展平结果,以返回新的数据集。

我认为您应该使用flatMap()来获取数据集,该数据集仅包含您要复制和修改的行。之后,使用filter()然后使用foreach()两个数据集修改这些行。

请注意,我还没试过这个,所以我不确定union()方法是创建包含新行的数据集,还是仅仅引用原始数据集中的行。如果它没有创建新行,那么只需将所有已过滤的行合并到一个新数据集中。