根据该列是否存在于另一个列的值中动态选择该列 (Java Spark SQL)

Dynamically selecting column based on if that column exists in another column's value (Java Spark SQL)

提问人:chingu 提问时间:7/11/2023 更新时间:7/11/2023 访问量:77

问:

我正在使用 Spark SQL Java(不是 scala 或 python)。这是我的数据集的简化示例(它的列比这多得多):

编号 引用 E_id F_id G_id
0 [E_id] 0000
1 [E_id,F_id,G_id] 0010 1000 1111

有一个名为的列,其中包含此行数据所具有的列名数组。因此,第一行只有一列,不会有列,或者第二行有所有 3 列。对于每一行,我需要选择相关列(“喜欢”和“所有数据行都有”),然后选择包含在 中。ReferencesEx_1Ex_2Ex_3ReferencesIDReferences

目前,这是我的代码:

final Dataset<Row> partitionedDf = df.select(col("id"), col("references));

我无法将任何列硬编码到我的选择中,因为 References 中可能的列是动态的。我需要找到一种方法来获取每行的引用,然后选择引用中的列,以便它们都包含在我的数据集中。Ex_1, Ex_2...etc

需要注意的一点是,引用中的列都遵循一种模式(它们都以“_id”结尾),所以我不确定是否也可以在这里使用正则表达式匹配,而不是依赖于引用数组中的内容。

java sql apache-spark apache-spark-sql spark-java

评论

0赞 nbk 7/11/2023
有多少列,为什么不捕获所有列,然后获取 arry 并提取您想要的数据,这样 SQL 就不是为动态而生的
0赞 SedJ601 7/11/2023
我同意@nbk。这听起来像是应该在代码中完成的事情。从表中读取所有数据并将其存储在对象中,然后使用代码或提取数据或执行所需的操作。JavaIf-statementsstreams
0赞 Oli 7/13/2023
预期输出是多少?您说的是“还要选择”参考“中包含的相应列”。但是,数据帧的所有行始终具有相同的列。数据帧基本上是表。因此,对于给定的行,如果引用列不包含给定列,应该怎么做?将其设置为 null?

答: 暂无答案