【问题标题】:Parquet bytes dataframe to UTF-8 in SparkSpark中将Parquet字节数据帧转换为UTF-8
【发布时间】:2020-01-31 20:56:15
【问题描述】:

我正在尝试使用 python 中的 Spark 从 parquet 文件中读取数据帧,但我的数据帧是字节编码的,所以当我使用 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

谢谢!

【问题讨论】:

  • 可能只是F.col('C2').astype('string')(未经测试)

标签: python-3.x dataframe apache-spark pyspark parquet


【解决方案1】:

你有一个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]))
#' --'

【讨论】:

  • 这就是解决方案!太感谢了。如果他们有一些方法或参数来解码整个数据帧而不进行强制转换,那就太好了。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 2017-06-02
  • 2018-07-16
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多