如何将火花数据帧数组转换为元组
Posted
技术标签:
【中文标题】如何将火花数据帧数组转换为元组【英文标题】:How to convert spark dataframe array to tuple 【发布时间】:2019-08-19 03:55:57 【问题描述】:如何在 scala 中将 spark 数据帧转换为 2 的元组?
我尝试在前导函数的帮助下分解数组并创建一个新列,以便我可以使用两列来创建元组。
为了使用前导功能,我需要一列作为排序依据,我没有。 请提出解决此问题的最佳方法?
注意:我需要在数组中保留相同的顺序。
例如:
输入
例如,输入看起来像这样,
id1 | [text1, text2, text3, text4]
id2 | [txt, txt2, txt4, txt5, txt6, txt7, txt8, txt9]
预期 o/p: 我需要得到长度为 2 的元组的输出
id1 | [(text1, text2), (text2, text3), (text3,text4)]
id2 | [(txt, txt2), (txt2, txt4), (txt4, txt5), (txt5, txt6), (txt6, txt7), (txt7, txt8), (txt8, txt9)]
【问题讨论】:
【参考方案1】:您可以使用sliding
窗口函数创建一个udf
来创建元组列表
val df = Seq(
("id1", List("text1", "text2", "text3", "text4")),
("id2", List("txt", "txt2", "txt4", "txt5", "txt6", "txt7", "txt8", "txt9"))
).toDF("id", "text")
val sliding = udf((value: Seq[String]) =>
value.toList.sliding(2).map case List(a, b) => (a, b) .toList
)
val result = df.withColumn("text", sliding($"text"))
输出:
+---+-------------------------------------------------------------------------------------------------+
|id |text |
+---+-------------------------------------------------------------------------------------------------+
|id1|[[text1, text2], [text2, text3], [text3, text4]] |
|id2|[[txt, txt2], [txt2, txt4], [txt4, txt5], [txt5, txt6], [txt6, txt7], [txt7, txt8], [txt8, txt9]]|
+---+-------------------------------------------------------------------------------------------------+
希望这会有所帮助!
【讨论】:
以上是关于如何将火花数据帧数组转换为元组的主要内容,如果未能解决你的问题,请参考以下文章