• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

spark1.6 fp-growth序列化数据错误

bigdata admin 2年前 (2017-06-27) 1556次浏览 0个评论 扫描二维码

Spark运行 FP-growth 异常报错

在 spark1.4 版上尝试运行频繁子项挖掘算法是,照搬官方提供的Python案例源码时,爆出该错误 com.esotericsoftware.kryo.KryoException (Java.lang.IllegalArgumentException: Can not set final Scala.collection.mutable.ListBuffer field org.apache.spark.mllib.fpm.FPTree$Summary.nodes to scala.collection.mutable.ArrayBuffer

网上关于该 pyspark 的资料不多,最终找到这两篇有价值的博文,
一是 apache 官网提供类似错误的:https://www.baidu.com/link?url=pChluzupXXYP1bZZGcYLu63HP2GKNFopp-XQnptShCGcDOhswe-7HSmm54rpjXeU7Mh00E0nTtqo7S8xtofy6_&wd=&eqid=e3291c23000d56de0000000556b3fa68

二是 stackoverflow 上提供的:http://stackoverflow.com/questions/32126007/fpgrowth-algorithm-in-spark/32820883

解决办法

在第二篇中有个指出了这是序列输出可能引起的错误,spark 采用的 kryo 序列化方式比 JavaSerializer 方式更快,但是在 1.4 版本的 spark 上会产生错误,故解决方案是,要么在 spark-defaults.conf 中替换,要么只运行中直接替换,现提供运行脚本 testfp.py:

from pyspark import SparkContext, SparkConf
from pyspark.mllib.fpm import FPGrowth

if __name__ == "__main__":
        conf = SparkConf().setAppName("pythonFP").set("spark.serializer", "org.apache.spark.serializer.JavaSerializer")
        sc = SparkContext(conf=conf)
        data = sc.textFile("data/mllib/sample_fpgrowth.txt")
        transactions = data.map(lambda line: line.strip().split(' '))
        model = FPGrowth.train(transactions, minSupport=0.5, numPartitions=10)
        result = model.freqItemsets().collect()
        for fi in result:
                 print(fi)
        sc.stop()

关键指出在于重新* *定义 conf 环境中的序列化类,然后利用 spark 提供的脚本运行命令即可正常运行(PS:采用最新版的 spark 也可解决此问题):

spark-submit –master=spark://namenode1-sit..com:7077,namenode2-sit..com:7077 testfp.py

转载自 http://blog.csdn.net/sinat_29508201/article/details/50637233


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明spark1.6 fp-growth 序列化数据错误
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!