【问题标题】:How to write a parquet file using Spark df.write.parquet with defined schema. - pyspark如何使用具有定义架构的 Spark df.write.parquet 编写镶木地板文件。 - pyspark
【发布时间】:2019-01-17 12:18:41
【问题描述】:

我正在使用 df.write 将 JSON 转换为 parquet 文件。在我的 JSON 文件中,我的所有列都是字符串,因此在读入数据帧时,我使用模式进行推断,并且文件中没有列的原因也在不断变化。在写入镶木地板时,我不想将它们写为字符串,而是希望将某些列更改为日期和小数。我知道我们可以在捕获到另一个 df 之前在 df select 的列级别中选择并进行强制转换。我不想这样做,因为我在文件中有 300 列,并且基于参数进行编程工作。有没有办法我们可以将它们作为模式放在文件中并执行它。

示例:

JSON 读取架构:

read_schema = StructType([
    StructField("event_name"              , StringType(), True),
    StructField("dollar_balance"          , StringType(), True),
    ])

Parquet 写入模式:

write_schema = StructType([
    StructField("event_name"              , StringType(), True),
    StructField("dollar_balance"          , DoubleType(), True),
    ])

也许是一个很长的问题。帮助将不胜感激。谢谢

【问题讨论】:

    标签: json apache-spark dataframe pyspark parquet


    【解决方案1】:

    您应该选择带有cast 的列,然后将数据框的rdd 绑定到write_schema。例如:

    from pyspark.sql import SparkSession
    from pyspark.sql.types import StructType, StructField, StringType, DoubleType
    
    spark = SparkSession\
            .builder\
            .appName("Write parquet")\
            .master("local[*]")\
            .getOrCreate()
    
    sc = spark.sparkContext
    
    df1 = spark.read.json("/path/to/json-file.json")
    
    write_schema = StructType([
        StructField("event_name", StringType(), True),
        StructField("dollar_balance", DoubleType(), True),
    ])
    
    spark.createDataFrame(
        df1.select(df1["event_name"], df1["dollar_balance"].cast(DoubleType()).alias("dollar_balance")).rdd,
        write_schema).show(10)
    

    【讨论】:

      【解决方案2】:

      请尝试以下。

        df.write.option("schema",write_schema).parquet(savepath)
      

      希望对你有帮助。

      【讨论】:

      • 嗨,我正在尝试这个,但它不起作用,我正在读取一个所有变量都是字符串的镶木地板文件,我想将它们全部放入浮点和整数,但是当我编写新的镶木地板时架构都是字符串@Amar
      猜你喜欢
      • 2017-06-20
      • 2017-12-25
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2018-08-13
      • 2023-03-19
      • 2019-06-02
      相关资源
      最近更新 更多