Spark-Scala可变长列表首元素与其余所有元素分别映射配对实现
解决方案
核心思路
用flatMap算子替代原有只能返回单组配对的map算子,对拆分后的列表做一对多展开,同时过滤行末逗号产生的空元素避免无效数据。
完整代码示例
// 原有读取和预处理逻辑保持不变 sc.textFile("你的文件路径") .map(x => x.substring(1, x.length - 1)) .map(x => x.split(",").toList) // 新增一对多展开逻辑 .flatMap(list => { val key = list.head // 取列表第一个元素后的所有值,过滤空字符串处理行尾逗号问题 val valueList = list.tail.filter(_.nonEmpty) // 每个值都和key组成配对 valueList.map(value => (key, value)) }) .toDF("c1", "c2")
逻辑说明
以你提到的1020对应行为例:
拆分后得到的列表为 List("1020", "23fe40-4796-ad3d-6d5499b|2021-09-19 01:38:59", "77a90a1c97b|2021-09-19 01:34:53", "")
- 取
list.head得到key为1020 list.tail拿到后面三个元素,过滤空值后得到两个有效数值- 遍历有效数值和key配对,得到两组结果,flatMap会直接把这两组结果展开到最终RDD中,完全匹配你需要的输出格式。
内容的提问来源于stack exchange,提问作者PixieDev
相关产品推荐
相关产品推荐

