SparkSql中不能使用select($“name“, $“age“ + 1)报错的问题解决

背景

在进行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()
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值