我想从文本文件中读取每一行,将其拆分并将其从Array [String]转换为Array [int]但是我得到了
值toInt不是Array [String]
的成员
我知道有类似的主题,但似乎没有人解释为什么会发生此错误以及使用toInt的正确方法。 任何人都可以帮助我吗?
我的代码是
val textFile = sc.textFile(inputFile)
val splitRdd = textFile.map(line => line.split(" ")).map(_.toInt)
答案 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>