在火花数据框中使用$“ col”而不是“ col”有什么好处

时间:2019-05-25 14:39:03

标签: scala apache-spark

让我们说我创建了一个如下创建的DF

  val posts = spark.read
    .option("rowTag","row")
    .option("attributePrefix","")
    .schema(Schemas.postSchema)
    .xml("src/main/resources/Posts.xml")

posts.select("Id")相比,使用posts.select($"Id")将其转换为列的好处是什么?

3 个答案:

答案 0 :(得分:2)

没有特别的优势,无论如何它都是自动转换。但并非SparkSQL中的所有方法都执行此转换,因此有时您必须将Column对象放入$。

答案 1 :(得分:2)

df.select直接在列上操作,而$"col"创建列实例。您也可以使用col函数创建Column实例。现在,可以将Columns组合起来以形成复杂的表达式,然后可以将这些表达式传递给任何df函数。

您还可以在Column类的Scaladoc上找到示例和更多用法。

Ref-https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.Column

答案 2 :(得分:1)

差别不大,但是某些功能只能使用带有列名的$来使用。

示例:如果我们要在此列中对值进行排序,而不在列名之前使用$,则它将不起作用。

Window.orderBy("Id".desc)

但是,如果您在列名之前使用$,则可以使用。

Window.orderBy($"Id".desc)