理解Scala中的一段代码

时间:2017-05-10 14:52:25

标签: scala apache-spark

我想了解以下代码的功能:

val newDataFrame = myDataFrame.withColumn("date", to_date(myDataFrame("start_date")))
          .withColumn("column1", lit(1))
          .select($"pk".as("id"), $"date", $"column1")

在我看来,它执行以下3个步骤:

1)通过将date转换为日期对象来创建新列myDataFrame("start_date")。在myDataFrame start_date列中,2017-05-04 10:22:03.0列的格式为to_date。因此,据我所知,yyyy-MM....自动转换为日期,而无需传递格式,例如columns1

2)创建一个新列1并用select($"pk".as("id"), $"date", $"column1")填充。

3)我稍微误解了这句话$newDataFrame的含义是什么?选择3列的原因是什么?它是否仅使用3列iddatecolumn1创建pidstat

1 个答案:

答案 0 :(得分:1)

你的1,2分是正确的。

至于第三种:$" pk"是SQL DSL(来自隐式定义,通常类似于import spark.implicits._),它与col(" pk")基本相同。它在数据框中找到一个名为pk的列。

as函数重命名列。所以$" pk" .as(" id")表示将名为pk的列作为列并将其重命名为id。

因此select基本上只接受数据帧中的pk,date和column1列(忽略其他所有内容)并在结果中将pk重命名为id。