2 scala anonymous-function user-defined-functions apache-spark
我的问题是:
第5行:单撇号(')符号的操作是什么?无法清楚地了解withColumn函数如何在这里工作.另外请详细说明它是如何显示这些列顺序 - | id | text | upper |.
码:
1. val dataset = Seq((0, "hello"),(1, "world")).toDF("id","text")
2. val upper: String => String =_.toUpperCase
3. import org.apache.spark.sql.functions.udf
4. val upperUDF = udf(upper)
5. dataset.withColumn("upper", upperUDF('text)).show
Run Code Online (Sandbox Code Playgroud)
输出:
+---------+---------+---------+
|id |text |upper |
+---------+---------+---------+
| 0 | hello |HELLO |
| 1 | world |WORLD |
+---------+---------+---------+
Run Code Online (Sandbox Code Playgroud)
Yuv*_*kov 11
'Scala中的符号是用于创建实例的语法糖Symbol.类.从文档中
例如,Scala术语
'mysym将以下列方式调用Symbol类的构造函数:Symbol("mysym").
因此,当您编写时'text,编译器会将其扩展为new Symbol("text").
这里有额外的魔力,因为Sparks upperUDF方法需要一个Column类型,而不是一个Symbol.但是,在SQLImplicits调用中定义了一个隐含的范围,symbolToColumn它将符号转换为列:
implicit def symbolToColumn(s: Symbol): ColumnName = new ColumnName(s.name)
Run Code Online (Sandbox Code Playgroud)
如果我们提取掉所有的含义和语法糖,那么等价物将是:
dataset.withColumn("upper", upperUDF(new Column(new Symbol("text").name))).show
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |