【问题标题】:Save spark dataframe schema to hdfs将 spark 数据帧模式保存到 hdfs
【发布时间】:2018-06-22 11:15:41
【问题描述】:

对于给定的数据框 (df),我们通过 df.schema 获取架构,它是一个 StructType 数组。从 spark-shell 运行时,我可以只将此模式保存到 hdfs 上吗?另外,保存模式的最佳格式是什么?

【问题讨论】:

标签: hdfs spark-dataframe


【解决方案1】:

您可以使用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")

【讨论】:

    【解决方案2】:
    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())
    • 如果使用 Python,saveAsPickleFilepickleFile 应该使用 saveAsObjectFileobjectFile 不可用。
    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多