我们有包含二进制列的Dataframe,当我们将Dataframe保存为csv时,二进制列将导致csv解析器出现问题。有没有办法强迫spark csv write写出 hex 或者 base64 编码字符串?
hex
base64
w1e3prcc1#
你可以办理登机手续 df.dtypes 类型是否相等 BinaryType 然后将其转换为 base64 字符串。在scala中,可以这样编写:
df.dtypes
BinaryType
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)
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)
2条答案
按热度按时间w1e3prcc1#
你可以办理登机手续
df.dtypes
类型是否相等BinaryType
然后将其转换为base64
字符串。在scala中,可以这样编写:6rqinv9w2#
您可以检查列类型,如果类型为二进制,则可以将其转换为十六进制字符串: