【问题标题】:separating key and value in a line using Spark Streaming使用 Spark Streaming 在一行中分离键和值
【发布时间】:2017-07-08 11:23:09
【问题描述】:

我有一个文件流,每个文件都包含由 key:value 组成的行 例如,一个文件会是这样的:

key1:value1
key2:value2
key3:value3

因此,我使用 Spark Streaming 来检测文件在 HDFS 中的到达,我需要做的是将这些行的每个值放入 HBase(HBase 的列由键组成) 如果行的类型是“字符串”,将键与值分开会很容易,但我拥有的是 DStream [String],如果我应用 DStream.flatmap(_.split(":")) 我会得到话,我将无法做到:

val separated = String.split(":")
val key = separated(0)
val value = separated(1)

我尝试使用 .ToString 将 DStream 转换为 String,当我使用 spark-submit 执行脚本时,我收到错误“ArrayOutOfBoundException”。

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:
    val rdd = sc.parallelize(Seq("key1:value1", "key2:value2"))
    
    rdd.map(_.split(":")).collect
    // Array[Array[String]] = Array(Array(key1, value1), Array(key2, value2))
    
    rdd.map(_.split(":")(0)).collect
    // Array[String] = Array(key1, key2)
    

    【讨论】:

    • 感谢您的回答,但在我的情况下,该文件包含数百行 key:value 类型,使用 collect 不会使其太大而无法轻松操作吗?
    • 我只是向您展示collect 的答案。去掉collect——你有一个RDD,你想要的结构。
    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 2021-11-19
    • 2015-11-03
    • 2016-11-29
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多