加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读