【问题标题】:Why spark map produces different result as RDD when input element converted to int/string in spark为什么当输入元素在火花中转换为整数/字符串时,火花映射会产生与 RDD 不同的结果
【发布时间】:2017-02-03 11:53:49
【问题描述】:

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

12
34
36

并将它放在 val lines 中。

以下代码行,

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,但是,我只有输入文件中的数字未更改。

有人可以帮我理解吗?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    区别在于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
    

    【讨论】:

    • 你也可以使用x(0).asDigit
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多