本文介绍了什么是“:_ *”?在斯卡拉意味着什么? (使用列表过滤数据框时)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当看到一些同事的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.

这篇关于什么是“:_ *”?在斯卡拉意味着什么? (使用列表过滤数据框时)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 19:24