【发布时间】:2018-06-22 11:15:41
【问题描述】:
对于给定的数据框 (df),我们通过 df.schema 获取架构,它是一个 StructType 数组。从 spark-shell 运行时,我可以只将此模式保存到 hdfs 上吗?另外,保存模式的最佳格式是什么?
【问题讨论】:
标签: hdfs spark-dataframe
对于给定的数据框 (df),我们通过 df.schema 获取架构,它是一个 StructType 数组。从 spark-shell 运行时,我可以只将此模式保存到 hdfs 上吗?另外,保存模式的最佳格式是什么?
【问题讨论】:
标签: hdfs spark-dataframe
您可以使用treeString
schema = df._jdf.schema().treeString()
并将其转换为 RDD 并使用 saveAsTextFile:
sc.parallelize([schema ]).saveAsTextFile(...)
或者使用 saveAsPickleFile:
temp_rdd = sc.parallelize(schema)
temp_rdd.coalesce(1).saveAsPickleFile("s3a://path/to/destination_schema.pickle")
【讨论】:
Yes, you can save the schema as df.write.format("parquet").save("path")
#Give path as a HDFS path
You can read also hdfs sqlContext.read.parquet("Path") #Give HDFS Path
Parquet + compression is the best storage strategy whether it resides on S3
or not.
Parquet is a columnar format, so it performs well without iterating over all
columns.
Please refer this link also https://stackoverflow.com/questions/34361222/dataframe-to-hdfs-in-spark-
scala
【讨论】:
df.schema 保存到 hdfs 上。
val rdd = sc.parallelize(df.schema) rdd.coalesce(1).saveAsObjectFile("<hdfs_path>") val rdd2: RDD[StructField] = sc.objectFile("<hdfs_path>") StructType(rdd2.collect())
saveAsPickleFile 和 pickleFile 应该使用 saveAsObjectFile 和 objectFile 不可用。