值toInt不是Array [String]错误的成员

时间:2018-04-15 16:47:57

标签: scala apache-spark text-files

我想从文本文件中读取每一行,将其拆分并将其从Array [String]转换为Array [int]但是我得到了

  

值toInt不是Array [String]

的成员

我知道有类似的主题,但似乎没有人解释为什么会发生此错误以及使用toInt的正确方法。 任何人都可以帮助我吗?

我的代码是

val textFile = sc.textFile(inputFile)
val splitRdd = textFile.map(line => line.split("  ")).map(_.toInt)

3 个答案:

答案 0 :(得分:1)

使用此val splitRdd = textFile.map(line => line.split(" ")),您获得RDD[Array[String]]

因此toInt中没有任何功能Array,因此无法使用.map(_.toInt)

您需要使用flatmap来获取展平元素

val splitRdd = textFile.flatmap(line => line.split("  "))

这将为您提供RDD[String],现在您可以使用map(_.toInt)将每个元素转换为Integer

val splitRdd = textFile.flatmap(_.split("  ")).map(_.toInt)

希望这有帮助!

答案 1 :(得分:0)

  

将其拆分并将其从Array [String]转换为Array [int]

然后map split的结果:

val splitRdd: RDD[Array[Int]] = textFile.map(
  line => line.split("  ").map(_.toInt)
)

答案 2 :(得分:-1)

您需要使用flatMap而不是map来获取RDD [String]:

scala> :paste
// Entering paste mode (ctrl-D to finish)

val textFile = sc.textFile("test.txt")
val splitRdd = textFile.flatMap(line => line.split(" ")).map(_.toInt)
splitRdd.collect()

// Exiting paste mode, now interpreting.

textFile: org.apache.spark.rdd.RDD[String] = test.txt MapPartitionsRDD[22] at textFile at <console>:28
splitRdd: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[24] at map at <console>:29
res12: Array[Int] = Array(123, 21312, 123, 2342, 2342, 23, 2342, 234, 234, 7657, 456754)

scala>