如何将JavaRDD <row>转换为JavaRDD <list <string>&gt;?

时间:2017-01-21 23:35:02

标签: java list apache-spark

JavaRDD<List<String>> documents = StopWordsRemover.Execute(lemmatizedTwits).toJavaRDD().map(new Function<Row, List<String>>() {
    @Override
    public List<String> call(Row row) throws Exception {
        List<String> document = new LinkedList<String>();
        for(int i = 0; i<row.length(); i++){
            document.add(row.get(i).toString());
        }
        return  document;
    }
});

我尝试使用此代码制作它,但我得到了WrappedArray

[[WrappedArray(happy, holiday, beth, hope, wonderful, christmas, wish, best)], [WrappedArray(light, shin, meeeeeeeee, like, diamond)]]

如何正确使用?

2 个答案:

答案 0 :(得分:2)

您可以使用getList方法:

Dataset<Row> lemmas = StopWordsRemover.Execute(lemmatizedTwits).select("lemmas");
JavaRDD<List<String>> documents = lemmas.toJavaRDD().map(row -> row.getList(0));

其中lemmas是带有词形文本的列的名称。如果只有一列(看起来就是这种情况),您可以跳过select。如果你知道列的索引,你也可以跳过select并将索引传递给getList但是它容易出错。

您当前的代码会迭代Row而非您尝试提取的字段。

答案 1 :(得分:0)

以下是使用excel文件的示例:

COPY km.json /opt/jboss
COPY entrypoint.sh /opt/jboss

希望这种安全的代码可以帮助您