当输入元素在spark中转换为int / string时,为什么spark map会产生与RDD不同的结果

时间:2017-02-03 03:11:02

标签: scala apache-spark

我只是想使用map创建一个pairRDD,我的输入文件包含3行数字,如下所示,

12
34个
36

并将其纳入val

以下代码行,

val pairRDD=lines.map(x => (x(0).toInt,x(1).toInt))

生成

(49,50)
(51,52)
(51,54)

结果

&安培;

val pairRDD=lines.map(x => (x(0),x(1)))

产生

(1,2)
(3,4)
(3,6)
结果。

所以,两行代码之间的唯一区别是,我在映射之前转换为Int,但是,我只是输入文件中的数字没有变化。

有人可以帮我理解吗?

1 个答案:

答案 0 :(得分:3)

区别在于scala Char.toInt 的工作原理,首先每行都是一个字符串,索引字符串,得到一个字符,Char.toInt方法获取该字符的ASCII值,所以'1'是49,例如:

val x = "12"
// x: String = 12

x(0)
// res12: Char = 1

x(0).toInt
// res13: Int = 49

要将数字字面转换为Int,您可以将其转换为String,然后转换为Int:

x(0).toString.toInt
// res15: Int = 1