【问题标题】:Scala - merge a list to mapScala - 将列表合并到地图
【发布时间】:2016-03-15 22:04:20
【问题描述】:

我需要将一个列表合并到来自 RDD 的集合中,但我在 Scala 中无法做到这一点:

var accounts = set("name" -> "", "id" -> 0, ....)

//Split the RDD into lines and split each line by `|` to get the values
stream.foreachRDD {_.map(_._2).flatMap(_.split("|")).foreach(f => /*merge here ?*/)}

如何将值与我的帐户集相关联?

例如,假设从 CSV 加载一个 RDD(我编造了这个数据)

 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|...
 ...

RDD 最多有 300 个列/字段。

我的主要目标是将其转换为一些 json,但我需要通过将每个值加载到映射或类来将其关联到一个键。

var election = Map ("firstname" -> "Donald",
"lastname" -> "Trump",
"country" -> "US",
"event" -> "Election",
"period" -> "March"
"var1" -> "Spring",
 ....
"varN" -> "...")

【问题讨论】:

  • 我想帮助你,但我不知道你需要什么。提供一些带有模拟数据的代码并删除 Spark 依赖项。例如。 “我有这个列表,我想将其转换为此集合。我不知道你有什么样的数据,它是如何格式化的,当你拆分时你会得到什么通过“|”和你需要用它做什么。
  • @slouc - 我只是提供了一个示例,请查看。谢谢!

标签: scala rdd


【解决方案1】:

我不确定我是否理解正确,但这有帮助吗?

val data = List(
  "Donald|Trump|US|Election|March",
  "John|Smith|UK|Election|February"
)

val mapKeys = List("firstname", "lastname", "country", "event", "period")

val election = data.map { row =>
  (mapKeys zip row.split("\\|").toList).map {
    case (key, value) => key -> value
  }.toMap
}

因此,您将获得一个映射列表 - 对于您的每一行数据,您将获得您所描述的键/值对映射。

【讨论】:

  • @sloc - 不错!我会试一试……有道理。现在正在考虑的另一种选择,也许我可以从data 创建一个 RDD 并将其与现有 RDD 合并并使用本机函数将 RDD 转换为 json ?
【解决方案2】:

对@slouc 的回答进行一点清理

stream.foreachRDD {_.map(_._2).map(l => (mapKeys zip l.split("\\|")).toMap).saveToEs(conf)}

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2019-05-02
    • 2020-09-22
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多