【问题标题】:Convert RDD[Key,List[Value]] into RDD with pairs [Key,ValueFromList1],[Key,ValueFromList2]使用对 [Key,Value From List1],[Key,ValueFrom List2] 将 RDD[Key,List[Value]] 转换为 RDD
【发布时间】:2017-11-24 19:55:13
【问题描述】:

我是 Spark 和转换的新手,所以需要一点帮助。我设法找到了相反的解决方案。当您将值放入列表而不是从中提取时。我想“扁平化”我猜密钥的值。我有一个类似 Map 的 RDD,其中键是 Int,值是字符串列表。我需要将列表中的 Key 和每个 Value 配对成一个 RDD。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    你可以使用 flatMap,然后像这样将每个元素映射到一个元组

    val flattenedRDD = pairRDD.flatMap { case (i,l)  => l.map( l => (i,l)) }
    

    【讨论】:

    • 嘿迈克,你提供的解决方案应该有效。但现在我在铸造方面遇到了问题。 Caused by: java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be cast to java.lang.String 是否有可能在平面地图行中正确投射?
    • 我不确定,但至少在您的代码失败时,我必须查看它
    • 我不相信数据类型就是你所说的那样。如果你发布你的 sn-p 我可以帮助你
    • //loading into data frame val matchesRDD = MongoSpark.load[Match](spark, readConfig) //making DF [Boolean,Seq[Player]] val tuplesArrayIGuess = matchesRDD .rdd .map(elem => {(elem.getAs[Boolean]("radiantWin"), elem.getAs[Seq[PlayerMongo]]("players"))}) //and code you've suggested. it's failing on case line. tuplesArrayIGuess.flatMap({ case (i,l) => l.map( l => (i,l)) }) 希望这会有所帮助。抱歉编辑风格。无法在评论部分以任何其他方式进行
    • 发现了问题(我猜)。当按名称从字段中获取值时,此转换不起作用,但按索引完美工作。感谢@mike 的帮助
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多