我有一个python Spark程序,它使用原始数据创建功能,并使用saveAsPickleFile
方法将它们存储到Pickle文件中。我也可以使用saveAsTextFile
方法。
另一个程序是用Java编写的,用ML实现分类器。
是否可以将序列化的pickle文件读入Java中的RDD?
答案 0 :(得分:0)
saveAsPickleFile
正在使用标准pickle
模块。 1}}可以使用Jython pickle
读取序列化的对象,但它远非直截了当pickle
创建纯文本文件。它也不能用Java加载。问题是你仍然需要解析内容。 PySpark版本的saveAsTextFile
只是使用saveAsTextFile
方法,它不必返回任何有意义的表示。如果您想要一些可以轻松加载的东西,最好手动创建字符串表示对于键值,最简单的方法是使用unicode
/ saveAsSequenceFile
:
sequenceFile
rdd = sc.parallelize([(1L, "foo"), (2L, "bar")])
rdd.saveAsSequenceFile("pairs")
如果您有更复杂的数据,可以使用Parquet文件:
sc.sequenceFile[Long, String]("pairs").collect()
// Array[(Long, String)] = Array((2,bar), (1,foo))
from pyspark.mllib.linalg import DenseVector
rdd = sc.parallelize([
(1L, DenseVector([1, 2])), (2L, DenseVector([3, 4]))])
rdd.toDF().write.parquet("pairs_parquet")
Avro甚至简单的JSON也可能是一个可行的解决方案。