Apache spark 向RDD提供用户定义的数据类型
我有一个这样的输入文件 A、 一, B、 二, C、 三, 如何将此RDD设置为这种格式 数据:RDD[(字符串,Int)] 我试过了,但没用Apache spark 向RDD提供用户定义的数据类型,apache-spark,rdd,Apache Spark,Rdd,我有一个这样的输入文件 A、 一, B、 二, C、 三, 如何将此RDD设置为这种格式 数据:RDD[(字符串,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],而
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))
(我添加了一个
映射
,用于按,“
”分割数据,我想您可能忘记添加到示例中了)。我认为最可读的形式应该是:
sc.textFile("myfile.txt")
.map { line =>
val Array(first, second) = line.split(",")
Foo(first, second.toInt)
}
但这不会处理错误,
Array(…)
和toInt
都可能失败。请用您尝试过的内容更新您的问题!不要把它贴在评论中。@Glennie Helles Sindholt我的错我忘了拆分。我想问一下,如果我们没有在“,”上拆分,然后我们映射(s=>(s(0),s(1).toInt)),那么它只需要s(0)将是文件上的第一个字符,s(1)将是第二个字符(在我们的示例中是逗号)?以什么方式不处理错误?你能给我举个例子吗?谢谢你们的回复。toInt
将在字符串无法解析为数字时引发异常。那工作就会失败。
sc.textFile("myfile.txt")
.map { line =>
val Array(first, second) = line.split(",")
Foo(first, second.toInt)
}