Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spark转换文件_Java_Apache Spark - Fatal编程技术网

Java spark转换文件

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(

我有一个输入文件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(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")