继这个好之后blog post我找到了github repo他的代码,我cloned它让它很容易为别人工作。无法序列化类org.apache.hadoop.io.DoubleWritable - MongoDB Hadoop连接器+火花+ Python
我创建了一个script到:
- 下载和构建spark。
- 下载,应用补丁并生成mongodb hadoop connector。
- 下载mongodb java driver v3.1.1 jar。
- 把最低限度的必要罐子一起
- 下载sample file
- 导入到一个MongoDB的集合
- 安装一个必要的Python库pytz
它准备的一切准备好运行。
的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脚本一切顺利完美,没有任何错误。
但是,一旦我取消在奥德最后一行尝试将数据备份保存到MongoDB的异常升高
Can't serialize class org.apache.hadoop.io.DoubleWritable
我想用Python> Java的转换过程> MongoDB的格式,它丢失时它会尝试序列化并且不起作用。
你可以看到在git repository
的issue我希望社会各界对我们解决这个问题的一种方式。你们知道如何解决这个问题吗?