将用户定义的数据类型赋予 RDD
giving user defined data types to RDD
我有一个这样的输入文件
A,1
B,2
C,3
val data = sc.textFile("myfile.txt")
我怎样才能使这个 RDD 成为这种格式
数据: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))
如果您想要 RDD[(String,Int)]
类型的 rdd
,您应该将输入映射到 Tuple2[String, Int]
而不是 foo
。像这样
val data = sc.textFile("myfile.txt")
.map(line => line.split(","))
.map(s => (s(0), s(1).toInt))
(我添加了一个 map
用于按 ","
拆分您的数据,我认为您可能忘记添加到您的示例中)。
我认为最易读的形式是:
sc.textFile("myfile.txt")
.map { line =>
val Array(first, second) = line.split(",")
Foo(first, second.toInt)
}
虽然这不处理错误,Array(...)
和 toInt
都可能失败。
我有一个这样的输入文件
A,1
B,2
C,3
val data = sc.textFile("myfile.txt")
我怎样才能使这个 RDD 成为这种格式 数据: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))
如果您想要 RDD[(String,Int)]
类型的 rdd
,您应该将输入映射到 Tuple2[String, Int]
而不是 foo
。像这样
val data = sc.textFile("myfile.txt")
.map(line => line.split(","))
.map(s => (s(0), s(1).toInt))
(我添加了一个 map
用于按 ","
拆分您的数据,我认为您可能忘记添加到您的示例中)。
我认为最易读的形式是:
sc.textFile("myfile.txt")
.map { line =>
val Array(first, second) = line.split(",")
Foo(first, second.toInt)
}
虽然这不处理错误,Array(...)
和 toInt
都可能失败。