【问题标题】:What does split() function do in sparksplit() 函数在 spark 中的作用
【发布时间】:2019-04-28 22:48:52
【问题描述】:

我有一个包含示例数据的数据文件

Pune|020|WA

等等。

我正在将数据加载到 RDD,然后运行一个 map 函数,在该函数中发送一个 split 函数。我期望这些行被单词分割。 例如。

val testRDD = sc.textFile("file.txt");
val splitRDD = testRDD.map(x => x.split("|"))

我期望在 newRDD 中的值是:

Pune
020
WA

我得到的价值是-P,u,n,e,0,2,0,W,A

请帮忙解释 此外,当我尝试使用splitRDD.foreach(println) 打印 RDD 时 我得到的值是

[Ljava.lang.String;@19e7bf4a
[Ljava.lang.String;@3dbfa08f
[Ljava.lang.String;@6fc62bf4
[Ljava.lang.String;@3b6fd980
[Ljava.lang.String;@2c3080fc
val testRDD = sc.textFile("file.txt");
val newRDD = testRDD.map(x => x.split("|"))

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    Java 中的方法split 接受正则表达式。 Pipe character | 在正则表达式中具有特殊含义,因此为了使您的拆分工作,您必须转义管道:

    testRDD.map(x => x.split("\\|")) // Pune, 020, WA
    

    您的第二个问题与Java 对数组的toString 实现有关,这不是很有帮助。 显示数组内容的最简单方法是使用mkString 将其制成字符串:

    splitRDD.foreach(x => println(x.mkString(", "))
    

    【讨论】: