本文介绍了什么是“:_ *”?在斯卡拉意味着什么? (使用列表过滤数据框时)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当看到一些同事的Scala-Spark代码时,有时会遇到这样的情况,如本例所示,他们使用列表来过滤数据帧:
val myList:List [String] = List( 0661, 0239, 0949, 0380&, 0279, 0311)
df。 filter(col( col1)。isin(myList:_ *)
上面的代码可以正常工作,这个,但是不会:
df.filter(col( col1)。isin(myList)
我不明白的是,冒号下划线之星是什么?:_ *
预先感谢!
解决方案
这确实意味着通过列表
作为单独的参数。它适用于具有vararg参数的方法,例如任意数量的字符串,但没有 List [String]
版本的方法。
Spark的 isin
函数具有签名 isin(列表:Any *):列
, Any *
表示任意数量的Any类型的参数。描述性不是很好,但是您可以在此处传递任意数量的字符串或任意数量的cols。
使用:_ *
语法,您要对编译器用varargs替换我的列表,等同于编写 .isin ( 0661, 0239 ...)
此外,自Spark 2.4.0起,存在函数 isInCollection
,它需要 Iterable
,因此您可以直接在此处传递 List
。
When seeing some co-workers' Scala-Spark code, sometimes I encounter that they use lists to filter dataframes as in this example:
val myList: List[String] = List("0661", "0239", "0949", "0380", "0279", "0311")
df.filter(col("col1").isin(myList:_*)
The code above works perfectly, this one, however, does not:
df.filter(col("col1").isin(myList)
What I don't understand is, what is that "colon underscore star" :_*
exactly doing?
Thanks in advance!
解决方案
It does mean "pass list as a separate parameters". It works for methods, that have a vararg argument, like "any number of strings", but not a List[String]
version.
Spark's isin
function has signature isin(list: Any*): Column
, Any*
means "any number of arguments of type Any". Not very descriptive, but here you can pass either any number of strings, or any number of cols.With :_*
syntax, you're saying to compiler "replace my list with varargs", it's equialent to writing .isin("0661", "0239" ...)
Also, since Spark 2.4.0 there's function isInCollection
, that takes Iterable
, so you can pass List
there directly.
这篇关于什么是“:_ *”?在斯卡拉意味着什么? (使用列表过滤数据框时)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!