2016-02-11 171 views
6

我在Spark 1.6中有一个数据框,并且只想从中选择一些列。列名,如:如何选择以通用标签开头的所有列

colA, colB, colC, colD, colE, colF-0, colF-1, colF-2 

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

df.select("colA", "colB", "colE") 

,但如何选择,说“可乐”,“COLB”和所有的colF- *列一次?有没有像Pandas那样的方法?

回答

9

首先用df.columns获取列名,然后过滤掉所需的列名称.filter(_.startsWith("colF"))。这给你一个字符串数组。但是选择需要select(String, String*)。幸运的是,select的列是select(Column*),所以最后将字符串转换为.map(df(_))列,最后将列数组变成var arg,并且使用: _*

df.select(df.columns.filter(_.startsWith("colF")).map(df(_)) : _*).show 

这个过滤器可以做得更复杂(和熊猫一样)。然而,这是一个相当丑陋的解决方案(IMO):

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

如果其他列的列表是固定的,你也可以合并列名的用过滤阵列固定阵列。

df.select((Array("colA", "colB") ++ df.columns.filter(_.startsWith("colF"))).map(df(_)) : _*).show 
+0

谢谢,但如何选择其他列,如问题中所述? – user299791

+0

我的问题的确切解决方案来自您的第二个和第三个解决方案的混合物......非常感谢,您完全掌握了主题 – user299791

相关问题