使用Java API对数据集中的所有列进行数据操作

使用Java API对数据集中的所有列进行数据操作,java,scala,apache-spark,apache-spark-sql,Java,Scala,Apache Spark,Apache Spark Sql,在数据集中读取csv文件后,希望使用JavaAPI从字符串类型数据中删除空格 Apache Spark 2.0.0 Dataset<Row> dataset = sparkSession.read().format("csv").option("header", "true").load("/pathToCsv/data.csv"); Dataset<String> dataset2 = dataset.map(new MapFunction<Row,String&

在数据集中读取csv文件后,希望使用JavaAPI从字符串类型数据中删除空格

Apache Spark 2.0.0

Dataset<Row> dataset = sparkSession.read().format("csv").option("header", "true").load("/pathToCsv/data.csv");
Dataset<String> dataset2 = dataset.map(new MapFunction<Row,String>() {

    @Override
    public String call(Row value) throws Exception {

        return value.getString(0).replace(" ", ""); 
        // But this will remove space from only first column
    }
}, Encoders.STRING());
数据集
opd
的数据不带空格。希望在Java中实现同样的功能。但在JavaAPI中,columns方法返回
String[]
并且不能对数据集执行函数编程

输入数据

+----------------+----------+-----+---+---+
|               x|         y|    z|  a|  b|
+----------------+----------+-----+---+---+
|     Hello World|John Smith|There|  1|2.3|
|Welcome to world| Bob Alice|Where|  5|3.6|
+----------------+----------+-----+---+---+
+--------------+---------+-----+---+---+
|             x|        y|    z|  a|  b|
+--------------+---------+-----+---+---+
|    HelloWorld|JohnSmith|There|  1|2.3|
|Welcometoworld| BobAlice|Where|  5|3.6|
+--------------+---------+-----+---+---+
预期输出数据

+----------------+----------+-----+---+---+
|               x|         y|    z|  a|  b|
+----------------+----------+-----+---+---+
|     Hello World|John Smith|There|  1|2.3|
|Welcome to world| Bob Alice|Where|  5|3.6|
+----------------+----------+-----+---+---+
+--------------+---------+-----+---+---+
|             x|        y|    z|  a|  b|
+--------------+---------+-----+---+---+
|    HelloWorld|JohnSmith|There|  1|2.3|
|Welcometoworld| BobAlice|Where|  5|3.6|
+--------------+---------+-----+---+---+
尝试:


您可以尝试按照正则表达式删除字符串之间的空格

value.getString(0).replaceAll("\\s+", "");
关于\s+:在一次和无限次之间尽可能多地匹配任何空白字符。 使用replaceAll函数代替replace


有关replace和replaceAll函数的详细信息

在要删除空格的位置,发布示例字符串和所需的输出。可以使用trim()函数删除前导和尾随空格。@Ravikumar希望删除字符串之间的空格。可以使用正则表达式删除字符串之间的空格,只需发布一个示例字符串以及删除空格后所需的输出字符串。@Ravikumar check edited Question这将仅删除第一列中的空格。打印出value.getString(0)并发布,以便查看字符串是否为多行。@mastersheel007尝试此
value.getString(0).replaceAll((?is)\\s+,”)