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]))
#' --'
我正在尝试使用 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]))
#' --'