繁体   English   中英

如何从Python程序创建的文件中读取Java程序中的RDD

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM