Scala 使用“$”有什么好处;col";超过;col";在spark数据帧中

Scala 使用“$”有什么好处;col";超过;col";在spark数据帧中,scala,apache-spark,Scala,Apache Spark,假设我创建了一个DF,如下所示 val posts = spark.read .option("rowTag","row") .option("attributePrefix","") .schema(Schemas.postSchema) .xml("src/main/resources/Posts.xml") 使用posts将其转换为列有什么好处。在posts上选择(“Id”)。选择($“Id”)没有什么特别的好处,它是一种自动转换。但并非SparkSQ

假设我创建了一个DF,如下所示

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

使用
posts将其转换为列有什么好处。在
posts上选择(“Id”)
。选择($“Id”)

没有什么特别的好处,它是一种自动转换。但并非SparkSQL中的所有方法都执行此转换,因此有时必须将列对象与$一起放置。

df。select
直接对列进行操作,而
$“col”
创建列实例。您还可以使用
col
函数创建列实例。现在,这些列可以组合成复杂的表达式,然后可以传递给任何df函数

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


Ref-

没有太大区别,但某些功能只能使用带有列名的
$

示例:如果要对该列中的值进行排序,而不在列名之前使用
$
,则该方法将无法工作

Window.orderBy(“Id.desc)

但是,如果在列名之前使用
$
,则它可以工作


Window.orderBy($“Id”.desc)

将它们转换为列类型有什么好处吗?或者在什么情况下我们应该转换它们?就像我说的,当API同时接受列对象和列名时,比如select(),没有任何优势。如果API不接受列名,则需要使用column对象以避免编译错误。