scala - Spark SQL Dataframes - 在连接的 where 子句中使用 $columnname 在 spark-shell 中工作但不能编译
问题描述
当我在 spark-shell 中给出以下 Spark SQL 语句时,它工作正常。但是当我尝试使用 sbt 构建 jar 文件时,同样的语句在构建时给出了错误。
val df3=df1.join(df2).where($"columnname1" === $"columnname2")
什么是理由?
我得到的错误是: value $ is not a member of StringContext
我正在导入以下内容。我是否需要专门为构建导入任何其他内容?
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
到目前为止,我按如下方式更改了该行,并且它构建良好并且运行良好。
val df3=df1.join(df2).where(df1("columnname1") === df2("columnname2"))
我想知道为什么早期的语法在构建中不起作用以及我在构建中缺少什么。
解决方案
不要忘记import
implicits
已经导入的spark-shell
.
val spark = SparkSession.builder().appName("test")
.master("local").getOrCreate()
import spark.implicits._
文件:
/**
* Converts $"col name" into a [[Column]].
*
* @since 2.0.0
*/
implicit class StringToColumn(val sc: StringContext) {
def $(args: Any*): ColumnName = {
new ColumnName(sc.s(args: _*))
}
}
推荐阅读
- python - 如何在 Pandas 数据框的多列上运行 Ta-Lib?
- r - 用于检查 R 中日期格式的字符串模式匹配
- jenkins - 为什么“捆绑安装”需要“sudo”这个“gem env”?
- linux - 无法从脚本 .sh 中删除 .tgz 文件
- php - php7中的`mysql_list_dbs`和`mysql_tablename`
- android - DiffUtil 和 notifyItemInserted 之间的区别
- python - Django - 熊猫数据框顺序
- r - 问:R Shiny Reactivity,2 个事件中的 1 个
- dart - 如何使用颤振在移动应用程序中禁用多点触控
- jenkins - 如何删除詹金斯管道中生成的测试结果