[英]How can I read RDD in my java program from a file that was created by Python program
我有一个python Spark程序,可以从原始数据创建功能,然后使用saveAsPickleFile
方法将其存储到Pickle文件中。 我也可以使用saveAsTextFile
方法。
另一个程序用Java编写,使用ML实现分类器。
是否可以将序列化的pickle文件读入Java的RDD中?
saveAsPickleFile
使用标准的pickle
模块。 可以读取使用pickle
序列化的对象,例如使用Jython pickle
但这远非直接 saveAsTextFile
创建纯文本文件。 没有理由不能在Java中加载它。 问题是您仍然必须解析内容。 PySpark版本的saveAsTextFile
只是使用unicode
方法,无需返回任何有意义的表示。 如果您希望可以轻松加载某些内容,则最好手动创建字符串表示形式 对于键值,最简单的方法是使用saveAsSequenceFile
/ sequenceFile
:
rdd = sc.parallelize([(1L, "foo"), (2L, "bar")]) rdd.saveAsSequenceFile("pairs")
sc.sequenceFile[Long, String]("pairs").collect() // Array[(Long, String)] = Array((2,bar), (1,foo))
如果您有更复杂的数据,则可以使用Parquet文件:
from pyspark.mllib.linalg import DenseVector rdd = sc.parallelize([ (1L, DenseVector([1, 2])), (2L, DenseVector([3, 4]))]) rdd.toDF().write.parquet("pairs_parquet")
sqlContext.read.parquet("pairs_parquet").rdd.collect() // Array[org.apache.spark.sql.Row] = Array([2,[3.0,4.0]], [1,[1.0,2.0]])
Avro甚至简单的JSON也是可行的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.