我想了解以下代码的功能:
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列id
,date
和column1
创建pidstat
?
答案 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。