Spark中的Dataset.col()和functions.col()有什么区别?

sec*_*ree 3 apache-spark apache-spark-sql

以下是一些声明:https://stackoverflow.com/a/45600938/4164722

当col返回未解析的列时,Dataset.col返回已解析的列.

有人可以提供更多细节吗?我何时应该使用Dataset.col()何时functions.col

谢谢.

小智 7

在大多数情况下,没有实际差异.例如:

val df: Dataset[Row] = ???

df.select(df.col("foo"))
df.select(col("foo"))
Run Code Online (Sandbox Code Playgroud)

是等价的,相同的:

df.where(df.col("foo") > 0)
df.where(col("foo") > 0)
Run Code Online (Sandbox Code Playgroud)

当物源很重要时,差异变得很重要,例如连接:

val df1: Dataset[Row] = ???
val df2: Dataset[Row] = ???

df1.join(df2, Seq("id")).select(df1.col("foo") =!= df2.col("foo"))
Run Code Online (Sandbox Code Playgroud)

因为它Dataset.col被解析并绑定到DataFrame它,它允许您明确地选择从特定父级降序的列.这是不可能的col.