无法序列化类 org.apache.hadoop.io.DoubleWritable - MongoDB Hadoop 连接器 + Spark + Python
Posted
技术标签:
【中文标题】无法序列化类 org.apache.hadoop.io.DoubleWritable - MongoDB Hadoop 连接器 + Spark + Python【英文标题】:Can't serialize class org.apache.hadoop.io.DoubleWritable - MongoDB Hadoop Connector + Spark + Python 【发布时间】:2015-12-08 19:54:24 【问题描述】:按照这个好的blog post,我找到了他的代码的github repo,我找到了cloned,以便其他人可以轻松地使用它。
我创建了一个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 脚本时,一切都顺利进行,没有任何错误。
但是一旦我取消注释 onder 中的最后一行以尝试将数据保存回 mongodb,就会引发异常
Can't serialize class org.apache.hadoop.io.DoubleWritable
我猜从 Python > Java > MongoDB 格式转换的过程在尝试序列化时会丢失并且不起作用。
您可以在git repository 中看到issue
我希望社区有办法让我们解决这个问题。你们知道如何解决这个问题吗?
【问题讨论】:
【参考方案1】:通过在提交哈希 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 上查看完整的 diff
https://github.com/danielsan/mongodb-analytics-examples/commit/f287620874038b2a491b50f48505c106299293fb
【讨论】:
以上是关于无法序列化类 org.apache.hadoop.io.DoubleWritable - MongoDB Hadoop 连接器 + Spark + Python的主要内容,如果未能解决你的问题,请参考以下文章
org.apache.spark.SparkException:任务不可序列化(由 org.apache.hadoop.conf.Configuration 引起)
Hadoop方法抛出‘java.lang.IllegalStateException‘异常. 无法评估 org.apache.hadoop.mapreduce.Job.toString()
SparkSQL 错误:org.apache.hadoop.hive.ql.metadata.HiveException:无法实例化 org.apache.hadoop.hive.ql.metadat
ClassCastException:org.apache.hadoop.io.Text 无法在 K-Means Clustering Mahout 中转换为 org.apache.hadoop.io
org.apache.hadoop.hive.ql.io.orc.OrcStruct无法转换为org.apache.hadoop.io.BinaryComparable