【问题标题】:spark write csv file with binary columnsspark用二进制列写入csv文件
【发布时间】:2021-05-13 10:48:12
【问题描述】:

我们有包含二进制列的数据框,当我们将数据框保存为 csv 时,二进制列会导致 csv 解析器出现问题。

有没有办法强制 spark csv write 写出hexbase64 编码字符串中的任何二进制列?

【问题讨论】:

    标签: dataframe csv apache-spark apache-spark-sql


    【解决方案1】:

    您可以检查df.dtypes 类型是否等于BinaryType,然后将其转换为base64 字符串。在 Scala 中你可以这样写:

    val castedCols = df.dtypes.map { case (c, t) =>
      if (t == "BinaryType") base64(col(c)).as(c) else col(c)
    }
    
    val df1 = df.select(castedCols:_*)
    
    df1.write.csv(outputPath)
    

    【讨论】:

      【解决方案2】:

      可以查看列类型,如果类型是二进制,可以强制转换为十六进制字符串:

      import pyspark.sql.functions as F
      from pyspark.sql.types import BinaryType
      
      df_out = df.select([
          F.hex(c.name).alias(c.name)
          if isinstance(c.dataType, BinaryType)
          else F.col(c)
          for c in df.schema
      ])
      
      df_out.write.csv('output', header=True)
      

      【讨论】:

        猜你喜欢
        • 2014-03-14
        • 2017-06-30
        • 1970-01-01
        • 2019-09-06
        • 2013-05-09
        • 2015-02-22
        • 1970-01-01
        相关资源
        最近更新 更多