Java spark转换文件
我有一个输入文件test.csv:Java spark转换文件,java,apache-spark,Java,Apache Spark,我有一个输入文件test.csv: a b c d 我的输出文件应该是: a|b|c|d| 如何在java spark上实现此功能?java 8: Dataset<Row> ds = session.read().csv("file"); Encoder<String> stringEncoder = Encoders.STRING(); ds .map(r -> r.getString(0), stringEncoder) . groupByKey(
a
b
c
d
我的输出文件应该是:
a|b|c|d|
如何在java spark上实现此功能?java 8:
Dataset<Row> ds = session.read().csv("file");
Encoder<String> stringEncoder = Encoders.STRING();
ds
.map(r -> r.getString(0), stringEncoder)
. groupByKey(r -> "", stringEncoder)
.mapGroups((key, values) -> {
Iterable<String> vals = () -> values;
return String.join("|", vals);
}, stringEncoder)
.repartition(1) // if you want to have single file
.write()
.csv("out");
类似地,如果需要|在最后一个元素之后,可以将mapGroups修改为:
在Scala中,这更容易:
val ds = session.read.csv("src/main/resources/t.csv")
ds
.map(r => r.getString(0))
.groupByKey(_ => 1)
.mapGroups{case (_, elems) =>
elems.mkString("|")
}
.repartition(1)
.write
.csv("out")
你好,Piotr Kalanski,感谢您的回复。但是我的spark版本是1.5.2,所以我不能使用sparksession。你能帮我吗;您好,Spark 1.5.2中的@baba您可以使用Spark csv库来读取/写入csv。请查看Spark 1.4的示例,您只需要使用SQLContext而不是SparkSession。
StringBuilder sb = new StringBuilder();
while(values.hasNext()) {
sb.append(values.next());
sb.append("|");
}
return sb.toString();
val ds = session.read.csv("src/main/resources/t.csv")
ds
.map(r => r.getString(0))
.groupByKey(_ => 1)
.mapGroups{case (_, elems) =>
elems.mkString("|")
}
.repartition(1)
.write
.csv("out")