Spark1.x升级Spark2.x常见异常【map】

本文介绍了Spark1.x到Spark2.x升级过程中遇到的常见问题,特别是关于map操作的异常。主要原因是Spark2.x中map操作会将DataFrame转换为Dataset,需要Encoder支持。文章通过示例详细分析了使用Row、java数据类型时出现的错误,并提供了两种解决方案:指定Encoder或转换为RDD。最后,作者提醒读者不同解决方案的权衡,指出转换为RDD可能会影响Spark2.x的使用风格。
摘要由CSDN通过智能技术生成

一.创建Spark入口

相较于Spark1.x,Spark2.x最明显的区别就是程序执行入口的区别了,从SparkContext变为SparkSession。相较于SparkContext,SparkSession对SparkContext进行了二次封装,把原有Spark1.x中的SQLContext和HiveContext进行了合并,默认为SQLContext,当需要访问Hive时,只需开启对Hive的支持即可【.enableHiveSupport(),当然hive的相关配置还是要设置的】,如下:

    val spark = SparkSession
      .builder
      .appName(s"${this.getClass.getSimpleName}")
      .master("local[2]")
      .getOrCreate()

二.创建DataFrame数据集

在Spark2.x中,获取数据集的方式和Spark1.x非常类似,只需从结构化数据源直接加载或从非结构化数据源转换即可,如下:

    // 数据集直接的转换
    import spark.implicits._

    val technology = spark.sparkContext
      .textFile("D:\\software\\spark-2.4.4\\data\\sql\\dataframe.txt")
      .map(_.split(","))
      .map(row => Technology(row(0), row
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值