将用户定义的数据类型提供给RDD

时间:2015-11-29 17:41:00

标签: apache-spark rdd

我有一个像这样的输入文件

A,1

B,2

C,3

val data = sc.textFile("myfile.txt")

如何使此RDD采用此格式 data:RDD [(String,Int)]

我尝试了这个,但没有工作

case class foo (a: String, b: Int)
val data = sc.textFile("myfile.txt").map(
 c => foo(c(0).toString, c(1).toInt))

2 个答案:

答案 0 :(得分:0)

如果您想要rdd类型RDD[(String,Int)],则应将输入映射到Tuple2[String, Int]而不是foo。喜欢这个

 val data = sc.textFile("myfile.txt")
              .map(line => line.split(","))
              .map(s => (s(0), s(1).toInt))

(我添加了map用于按","分割您的数据,我想您可能忘记添加到您的示例中。

答案 1 :(得分:0)

我认为最易读的形式是:

sc.textFile("myfile.txt")
  .map { line =>
    val Array(first, second) = line.split(",")
    Foo(first, second.toInt)
  }

但这不会处理错误,Array(...)toInt都可能失败。