scala – 如何选择以公共标签开头的所有列
发布时间:2020-12-16 09:00:29 所属栏目:安全 来源:网络整理
导读:我在Spark 1.6中有一个数据框,并希望从中选择一些列.列名如下: colA,colB,colC,colD,colE,colF-0,colF-1,colF-2 我知道我可以这样做来选择特定的列: df.select("colA","colB","colE") 但如何选择,一次说“colA”,“colB”和所有colF- *列?有没有像Pandas
我在Spark 1.6中有一个数据框,并希望从中选择一些列.列名如下:
colA,colB,colC,colD,colE,colF-0,colF-1,colF-2 我知道我可以这样做来选择特定的列: df.select("colA","colB","colE") 但如何选择,一次说“colA”,“colB”和所有colF- *列?有没有像Pandas这样的方式? 解决方法
首先使用df.columns获取列名,然后向下过滤到您想要的列名.filter(_.startsWith(“colF”)).这为您提供了一系列字符串.但select选择select(String,String *).幸运的是,选择列是select(Column *),所以最后将字符串转换为带有.map(df(_))的列,最后将列数组转换为带有:_ *的var arg.
df.select(df.columns.filter(_.startsWith("colF")).map(df(_)) : _*).show 这个过滤器可以变得更复杂(与Pandas相同).然而,它是一个相当丑陋的解决方案(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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |