我有一个spark Dataframe df
。有没有办法使用这些列的列表来选择一些列?
scala> df.columns
res0: Array[String] = Array("a", "b", "c", "d")
我知道我可以做类似df.select("b", "c")
的事情,但是假设我有一个包含几个列名val cols = List("b", "c")
的列表,有没有办法把它传递给df.select? df.select(cols)
抛出一个错误。
我有一个spark Dataframe df
。有没有办法使用这些列的列表来选择一些列?
scala> df.columns
res0: Array[String] = Array("a", "b", "c", "d")
我知道我可以做类似df.select("b", "c")
的事情,但是假设我有一个包含几个列名val cols = List("b", "c")
的列表,有没有办法把它传递给df.select? df.select(cols)
抛出一个错误。
8条答案
按热度按时间t9aqgxwy1#
使用
df.select(cols.head, cols.tail: _*)
让我知道它是否有效:)
@Ben的解释:
关键是select的方法签名:
cols:String*
条目接受可变数量的参数。:_*
解包参数,以便可以通过此参数处理它们。非常类似于python中使用*args
解包。其他示例请参见here和here。prdp8dxp2#
您可以将String类型转换为spark列,如下所示:
iyzzxitl3#
我刚学会的另一个选择。
pb3s4cty4#
首先将String Array转换为Spark数据集的List Column类型,如下所示
然后在select语句中使用JavaConversions函数转换List,如下所示。
jw5wzhpr5#
您可以将
Column*
类型的参数传递给select
:wribegjk6#
你可以这样做
Spark selectExp源代码
jmo0nnb37#
是的,你可以在scala中使用**.select**。
使用**.head和.tail选择List()**中提到的所有值
范例
Explanation
zbwhf8kr8#
准备一个列出所有需求特性的列表,然后使用带 * 的Spark内置函数,参考如下所示。
有时我们会收到错误:“分析异常:无法解析给定输入列的“
col1
””尝试将要素转换为字符串类型,如下所示:最后,您将获得包含所需要素的数据集。