无法序列化类org.apache.hadoop.io.DoubleWritable - MongoDB Hadoop Connector + Spark + Python

时间:2015-12-08 19:54:24

标签: python mongodb hadoop apache-spark pyspark

遵循此优惠blog post我找到了他的代码github repo,我cloned,以便让其他代码轻松工作。

我创建了一个script来:

  1. 下载并构建spark
  2. 下载,应用补丁并构建mongodb hadoop connector
  3. 下载mongodb java driver v3.1.1 jar
  4. 将最小必要的罐子放在一起
  5. 下载sample file
  6. 将其导入mongodb集合
  7. 安装一个必要的python库pytz
  8. 它准备好一切准备好运行。

    python script基本上是这样的:

    config = {"mongo.input.uri": "mongodb://localhost:27017/marketdata.minbars"}
    inputFormatClassName = "com.mongodb.hadoop.MongoInputFormat"
    keyClassName = "org.apache.hadoop.io.Text"
    valueClassName = "org.apache.hadoop.io.MapWritable"
    
    minBarRawRDD = sc.newAPIHadoopRDD(inputFormatClassName, keyClassName, valueClassName, None, None, config)
    minBarRDD = minBarRawRDD.values()
    
    import calendar, time, math
    dateFormatString = '%Y-%m-%d %H:%M'     
    groupedBars = minBarRDD.sortBy(lambda doc: str(doc["Timestamp"])).groupBy(lambda doc: 
        (doc["Symbol"], math.floor(calendar.timegm(time.strptime(doc["Timestamp"], dateFormatString)) / (5*60))))
    
    def ohlc(grouping):
        # some
    
    config["mongo.output.uri"] = "mongodb://localhost:27017/marketdata.fiveminutebars"
    outputFormatClassName = "com.mongodb.hadoop.MongoOutputFormat"
    # resultRDD.saveAsNewAPIHadoopFile("file:///placeholder", outputFormatClassName, None, None, None, None, config)
    

    最后一行评论了当我运行spark-ohlcbars-example.submit.sh脚本时,一切都完美无误。

    但是,一旦我取消注释onder中的最后一行,试图将数据保存回mongodb,就会引发异常

    Can't serialize class org.apache.hadoop.io.DoubleWritable
    

    我想从Python转换的过程> Java> MongoDB格式在尝试序列化时会丢失,但不起作用。

    您可以在issue

    中看到git repository

    我希望社区有办法解决这个问题。你们知道如何克服这个问题吗?

1 个答案:

答案 0 :(得分:0)

通过在提交哈希 affad1b7 上使用pymongo_spark解决了该特定问题。

我将文件复制到我的项目中,并在主python脚本上添加了3行代码:

import pymongo_spark
pymongo_spark.activate()
...
# at the end of the script
resultRDD.saveToMongoDB(config["mongo.output.uri"])

你可以在github commit

上看到完整的差异

https://github.com/danielsan/mongodb-analytics-examples/commit/f287620874038b2a491b50f48505c106299293fb