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

时间:2015-10-22 17:08:54

标签: java python apache-spark rdd

我有一个python Spark程序,它使用原始数据创建功能,并使用saveAsPickleFile方法将它们存储到Pickle文件中。我也可以使用saveAsTextFile方法。

另一个程序是用Java编写的,用ML实现分类器。

是否可以将序列化的pickle文件读入Java中的RDD?

1 个答案:

答案 0 :(得分:0)

  • saveAsPickleFile正在使用标准pickle模块。 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也可能是一个可行的解决方案。