2024-09-29 19:35:10 发布
网友
我有一个pythonspark程序,它从原始数据创建特性,并使用saveAsPickleFile方法将它们存储到Pickle文件中。我也可以使用saveAsTextFile方法。在
saveAsPickleFile
saveAsTextFile
另一个程序是用Java编写的,使用ML实现一个分类器
是否可以将序列化的pickle文件读入Java中的RDDs?在
pickle
unicode
对于键值,最简单的方法是使用saveAsSequenceFile/sequenceFile:
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也可能是一个可行的解决方案。
saveAsPickleFile
正在使用标准pickle
模块。可以使用pickle
读取序列化的对象,例如使用Jythonpickle
,但这远不是直接的saveAsTextFile
创建纯文本文件。没有理由不能在Java中加载它。问题是你仍然需要解析内容。saveAsTextFile
的PySpark版本只使用unicode
方法,不必返回任何有意义的表示。如果你想要一些容易加载的东西,最好手动创建字符串表示对于键值,最简单的方法是使用
saveAsSequenceFile
/sequenceFile
:如果您有更复杂的数据,可以使用拼花地板文件:
Avro甚至简单的JSON也可能是一个可行的解决方案。
相关问题 更多 >
编程相关推荐