背景
在进行sparksql编程的时候,使用select($"name", $"age" + 1)会出险报错的情况,目的参数Column类型,但是报错如下图
版本:
<scala.version>2.11.8</scala.version> <spark.version>2.2.0</spark.version> <scala.compat.version>2.11</scala.compat.version>
解决方式
在需要使用的$"xxx"的位置使用session对象导入扩展对象
import session.implicits._
完整代码
1. 在spark 1.6.0 版本之前使用的df("xx") 这中操作
2.spark2.1.0版本之后引入$"xxx"的写法
PS: 目前依然兼容df("xx")的写法
def testSqlApi(session: SparkSession) = {
import session.implicits._
val df = session.read.option("multiLine", true).json("scala-demo\\src\\main\\scala\\com\\example\\scala\\rdd\\emperor.json")
df.printSchema()
println("1.指定列字段名称")
df.select("name", "age").show()
df.selectExpr("name", "age+1").show()
println("2.指定列字段名称")
df.filter("age>25").show()
println("3.分组求个数")
df.groupBy("age").count().show()
// val t = df("age") + 1
println("4.指定字段的运算")
// spark 1.6.0 版本的写法
df.select(df("name"), df("age") + 1).show()
// spark 2.1.0之后引入的写法
df.select($"name", $"age" + 1).show()
}
def main(args: Array[String]): Unit = {
val b = SparkSession.builder().master("local")
val session: SparkSession = b.getOrCreate()
session.sparkContext.getConf.setMaster("local")
testSqlApi(session)
session.stop()
}