代码之家  ›  专栏  ›  技术社区  ›  user8331236

使用withColumn函数下的匿名函数在Scala中表示单撇号(')的意义?[副本]

  •  6
  • user8331236  · 技术社区  · 8 年前

    我的问题是:

    第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
    

    输出:

    +---------+---------+---------+
    |id       |text     |upper    |
    +---------+---------+---------+
    | 0       | hello   |HELLO    |
    | 1       | world   |WORLD    |
    +---------+---------+---------+
    
    1 回复  |  直到 8 年前
        1
  •  16
  •   Yuval Itzchakov    8 年前

    这个 ' Symbol

    'mysym 将按以下方式调用Symbol类的构造函数:Symbol(“mysym”)。

    'text ,编译器将其扩展为 new Symbol("text")

    这里有额外的魔力,因为火花 upperUDF 方法需要 Column 象征 但是,在中定义了一个隐式范围 SQLImplicits 打电话 symbolToColumn 将符号转换为列:

    implicit def symbolToColumn(s: Symbol): ColumnName = new ColumnName(s.name)
    

    dataset.withColumn("upper", upperUDF(new Column(new Symbol("text").name))).show
    
    推荐文章