首页 > 解决方案 > 使用另一个 ArrayType 列的 Spark 动态列访问

问题描述

我在下面有一个 Spark 数据框:

df.show()
+------+--------------------+--------------------+------+--------+------------------+
|    id|            A_amount|            B_amount|  A_pi|    B_pi|mismatchingColumns|
+------+--------------------+--------------------+------+--------+------------------+
|     1|5.000000000000000000|5.000003000000000000|   PI1|     PI1|          [amount]|
|     2|5.000000000000000000|5.000000000000000000|   PI2|     PI3|              [pi]|
|     3|1.000000000000000000|1.000001000000000000|   PI4|     PI5|      [amount, pi]|
+------+--------------------+--------------------+------+--------+------------------+

我想做的是创建一个新列,该列mismatchingColumns动态使用每个列名,并使用“A_”和“B_”前缀访问数据框中的其他列,将它们放入 Map。

+------------------+---------------------------------------------------------------------+
|mismatchingColumns|                                                       New Map Column|
+------------------+---------------------------------------------------------------------+
|          [amount]|               [amount -> 5.000000000000000000, 5.000003000000000000]|
|              [pi]|                                                    [pi -> PI2, PI3 ]|
|      [amount, pi]|[amount -> 1.000000000000000000, 1.000001000000000000, pi -> PI4, PI5]
+------------------+---------------------------------------------------------------------+

我考虑transformmismatchingColumns列上使用 a ,但这不起作用,因为 lambda 函数的类型是Column => Column,而 的类型colString => Column

我正在运行3.0.1带有 scala 版本 scalaVersion的 spark 版本2.12.12

非常感谢任何帮助 - 谢谢。

标签: scalaapache-spark

解决方案


推荐阅读