我必须使用Spark 1.6将用Scala 2.10.4编写的应用程序迁移到Spark 2.1。
该应用程序处理大小约为7GB的文本文件,并包含多个rdd转换。
有人告诉我尝试使用Scala 2.11重新编译它,这应该足以使其与Spark 2.1一起使用。正如我在Spark 2中所知道的那样,这对我来说听起来很奇怪,例如:
由于使用Kryo序列化程序注册,我仅用较小的更改就设法在scala 2.11中用spark 2重新编译了该应用程序。 我仍然想解决一些运行时错误,并试图弄清楚接下来会发生什么。
我的问题涉及到什么才能使应用程序像以前那样进行“必要的”更改,以及在性能优化方面(建议至少保持相同的性能水平)“建议”哪些更改?您认为对于Spark的新手可能有用:)。
谢谢!
答案 0 :(得分:1)
我一年前也做过同样的事情,您不需要做很多更改,我的想法是:
spark/sqlContext
,则只需在代码开头的SparkSession
实例中提取此变量即可。df.map
在Spark 1.6中已切换为RDD
API,在Spark 2+中,您停留在DataFrame API(现在具有map
方法)中。要获得与以前相同的功能,请将df.map
替换为df.rdd.map
。 df.foreach
和df.mapPartitions
等同样如此unionAll
在火花1.6只是union
在火花2 + 您应该考虑的内容(但需要做更多的工作):
collect_list
可以与结构一起使用,在Spark 1.6中,它只能与基元一起使用。这样可以简化一些事情leftanti
连接