提问人:chingu 提问时间:7/11/2023 更新时间:7/11/2023 访问量:43
根据其名称/正则表达式选择设置列和其他列的列表 (Spark SQL Java)
Select a list of set columns AND other columns depending on their name/regex (Spark SQL Java)
问:
我有一个需要选择的列列表。我有此列表中每列的字段名称,因此很容易选择。
public Column[] getSelectColumns()
{
return new Column[]{
col("name"),
col("value"),
col("date"),
}
}
final Dataset<Row> testDf = df.select(getSelectColumns());
但是,我想将其与我没有确切字段名称的其他列结合起来。这些其他列仅在其名称中具有相似的模式,例如 、 、 。它们都以“_id”结尾。每行可能有也可能没有这些“_id”列。“_id”列是动态的,所以我不能像在 中那样对它们进行硬编码。weather_id
house_id
person_id
getSelectColumns()
我是否可以根据“_id”模式(例如使用正则表达式)选择列?如果可以的话,我如何将其与我的常规选择结合起来?因此,我的最终结果包含我需要的所有列。Dataset<Row>
答:
0赞
Rajat Mishra
7/11/2023
#1
Spark 有一个函数,可用于根据 .colRegex
regex
像这样的东西:
df.select(df.colRegex("`^.*name*`")).show()
0赞
Medzila
7/11/2023
#2
你可以使用Dataset#colRegex(String)
df.colRegex("`.*_id`")
这应该有效。 我没有测试过,但你可以将你的代码更改为:
Dataset<Row> df = ...;
Column[] cols = new Column[]{
functions.col("name"),
functions.col("value"),
functions.col("date"),
df.colRegex("`.*_id`")
};
final Dataset<Row> testDf = df.select(getSelectColumns());
或者,您可以使用来获取所有列名,然后应用常规的 java 正则表达式来仅过滤掉所需的列并从那里选择列。df.columns()
查看更多:
评论