Spark 中的 Parquet 字节数据帧到 UTF-8

Parquet bytes dataframe to UTF-8 in Spark

我正在尝试使用 python 中的 Spark 从镶木地板文件中读取数据帧,但我的数据帧是字节编码的,所以当我使用 spark.read.parquet 然后 df.show() 它看起来像下面这样:

    +---+----------+----+
    | C1|        C2|  C3|
    +---+----------+----+
    |  1|[20 2D 2D]|   0|
    |  2|[32 30 31]|   0|
    |  3|[43 6F 6D]|   0|
    +---+----------+----+

如您所见,值已转换为十六进制值...我已经阅读了 spark 数据帧的整个文档,但没有找到任何内容。是否可以转换为 UTF-8?

df.printSchema() 输出:

 |-- C1: long (nullable = true)
 |-- C2: binary (nullable = true)
 |-- C3: long (nullable = true)

Spark版本为2.4.4

谢谢!

您有一个 binary 类型的列,类似于 python 中的 bytearray。您只需要转换为字符串:

df = df.withColumn("C2", df["C2"].cast("string"))
df.show()
#+---+---+---+
#| C1| C2| C3|
#+---+---+---+
#|  1| --|  0|
#|  2|201|  0|
#|  3|Com|  0|
#+---+---+---+

同样在python:

str(bytearray([0x20, 0x2D, 0x2D]))
#' --'