Dataframe:为Scala中的所有列添加前缀

Ala*_*Lam 3 scala dataframe

val prefix = "ABC"
val renamedColumns = df.columns.map(c=> df(c).as(s"$prefix$c"))
val dfNew = df.select(renamedColumns: _*)
Run Code Online (Sandbox Code Playgroud)

嗨,我对scala相当新,上面的代码可以很好地为所有列添加前缀.有人可以解释一下它是如何工作的细分吗?上面的第二行将返回col1的地图为ABCcol1,col2为ABCcol2 ....等我无法理解第三行正在做什么,特别是":_*最后.

感谢您的帮助.

nld*_*oty 9

第三行是Scala的句法糖的一个例子.从本质上讲,Scala有办法缩短你输入的内容,你发现了可怕的内容:_*.

有两个部分,以这个小位-在:_*有两个不同的目的.在:通常是归属,它告诉编译器"这是我需要使用此方法的类型".该_*然而,你的类型-在Scala中,这是类型可变参数.Varargs是一种具有任意数量值的类型(这里是良好的资源).它允许您传递一个方法,一个您不知道元素数量的列表.

在您的示例中,您将renamedColumns使用新的字符串附件创建一个从原始数据框的列调用的变量.虽然您可能知道df中有多少列,但Scala却没有.当您创建dfNew时,您正在运行一个select语句并传入新的列名,其中可能有任意数字.从本质上讲,您不知道可能有多少列,因此您传入varargs以允许数字是任意的,由编译器确定.