【问题标题】:What changes do I have to do to migrate an application from Spark 1.5 to Spark 2.1?要将应用程序从 Spark 1.5 迁移到 Spark 2.1,我需要做哪些更改?
【发布时间】:2019-02-01 16:47:06
【问题描述】:

我必须将使用 Spark 1.6 以 Scala 2.10.4 编写的应用程序迁移到 Spark 2.1。

该应用程序处理大小约为 7GB 的文本文件,并包含多个 rdd 转换。

有人告诉我尝试使用 scala 2.11 重新编译它,这应该足以使其与 Spark 2.1 一起使用。这对我来说听起来很奇怪,因为我知道在 Spark 2 中有一些相关的变化,比如:

  • SparkSession对象介绍
  • DataSet 和 DataFrame 的合并 API

我设法用 scala 2.11 重新编译了 spark 2 中的应用程序,由于 Kryo Serializer 注册,只有微小的变化。 我仍然有一些运行时错误要解决,我正在尝试弄清楚接下来会发生什么。

我的问题是,为了使应用程序像以前一样工作,哪些更改是“必要的”,在性能优化方面“推荐”哪些更改(我需要保持至少相同水平的性能),以及任何您认为这可能对 spark 的新手有用:)。

提前致谢!

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    我在 1 年前也做过同样的事情,你需要做的改变并不多,我想到了什么:

    • 如果您的代码中充满了spark/sqlContext,那么只需从代码开头的SparkSession 实例中提取此变量即可。
    • df.map 在 Spark 1.6 中切换到 RDD API,在 Spark 2.+ 中,您留在 DataFrame API(现在有一个 map 方法)。要获得与以前相同的功能,请将df.map 替换为df.rdd.mapdf.foreachdf.mapPartitions 等也是如此
    • Spark 1.6 中的 unionAll 只是 Spark 2 中的 union。+
    • databrick csv 库现在包含在 Spark 中。
    • 当您插入到分区 hive 表中时,分区列现在必须作为架构中的最后一列,在 Spark 1.6 中它必须是第一列

    你应该考虑什么(但需要更多的工作):

    • 将 RDD 代码迁移到数据集代码中
    • 启用 CBO(基于成本的优化器)
    • collect_list 可以与结构一起使用,在 Spark 1.6 中它只能与原语一起使用。这可以简化一些事情
    • 数据源 API 已改进/统一
    • leftanti加入介绍

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2011-11-14
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多