如何选择以通用标签开头的所有列

use*_*791 12 scala apache-spark spark-dataframe

我在Spark 1.6中有一个数据框,并希望从中选择一些列.列名称如下:

colA, colB, colC, colD, colE, colF-0, colF-1, colF-2
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做来选择特定的列:

df.select("colA", "colB", "colE")
Run Code Online (Sandbox Code Playgroud)

但如何选择,一次说"colA","colB"和所有colF-*列?有没有像熊猫一样的方式?

Mic*_*mlk 22

首先获取列名称df.columns,然后向下过滤到您想要的列名称.filter(_.startsWith("colF")).这为您提供了一系列字符串.但选择需要select(String, String*).幸运的是,选择列是select(Column*),所以最后将字符串转换为列,最后将列.map(df(_))数组转换为var arg : _*.

df.select(df.columns.filter(_.startsWith("colF")).map(df(_)) : _*).show
Run Code Online (Sandbox Code Playgroud)

这个过滤器可以变得更复杂(与Pandas相同).然而,它是一个相当丑陋的解决方案(IMO):

df.select(df.columns.filter(x => (x.equals("colA") || x.startsWith("colF"))).map(df(_)) : _*).show 
Run Code Online (Sandbox Code Playgroud)

如果修复了其他列的列表,您还可以将固定的列名称数组与已过滤的数组合并.

df.select((Array("colA", "colB") ++ df.columns.filter(_.startsWith("colF"))).map(df(_)) : _*).show
Run Code Online (Sandbox Code Playgroud)


Eug*_*nok 13

Python(在 Azure Databricks 中测试)

selected_columns = [column for column in df.columns if column.startswith("colF")]
df2 = df.select(selected_columns)
Run Code Online (Sandbox Code Playgroud)