spark用二进制列写入csv文件

tktrz96b  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(562)

我们有包含二进制列的Dataframe,当我们将Dataframe保存为csv时,二进制列将导致csv解析器出现问题。
有没有办法强迫spark csv write写出 hex 或者 base64 编码字符串?

w1e3prcc

w1e3prcc1#

你可以办理登机手续 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)
6rqinv9w

6rqinv9w2#

您可以检查列类型,如果类型为二进制,则可以将其转换为十六进制字符串:

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)

相关问题