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

2024-09-29 19:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pythonspark程序,它从原始数据创建特性,并使用saveAsPickleFile方法将它们存储到Pickle文件中。我也可以使用saveAsTextFile方法。在

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

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


Tags: 文件方法程序原始数据序列化分类器特性java
1条回答
网友
1楼 · 发布于 2024-09-29 19:35:10
  • saveAsPickleFile正在使用标准pickle模块。可以使用pickle读取序列化的对象,例如使用Jythonpickle,但这远不是直接的
  • saveAsTextFile创建纯文本文件。没有理由不能在Java中加载它。问题是你仍然需要解析内容。saveAsTextFile的PySpark版本只使用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))
    
  • 如果您有更复杂的数据,可以使用拼花地板文件:

    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也可能是一个可行的解决方案。

相关问题 更多 >

    热门问题