0

我通过从 HDFS 读取数据在 PySpark 中创建了数据框,如下所示:

df = spark.read.parquet('path/to/parquet')

我希望数据框有两列字符串:

+------------+------------------+
|my_column   |my_other_column   |
+------------+------------------+
|my_string_1 |my_other_string_1 |
|my_string_2 |my_other_string_2 |
|my_string_3 |my_other_string_3 |
|my_string_4 |my_other_string_4 |
|my_string_5 |my_other_string_5 |
|my_string_6 |my_other_string_6 |
|my_string_7 |my_other_string_7 |
|my_string_8 |my_other_string_8 |
+------------+------------------+

但是,我得到my_column了一些以 开头的字符串的列[Ljava.lang.Object;,如下所示:

>> df.show(truncate=False)
+-----------------------------+------------------+
|my_column                    |my_other_column   |
+-----------------------------+------------------+
|[Ljava.lang.Object;@7abeeeb6 |my_other_string_1 |
|[Ljava.lang.Object;@5c1bbb1c |my_other_string_2 |
|[Ljava.lang.Object;@6be335ee |my_other_string_3 |
|[Ljava.lang.Object;@153bdb33 |my_other_string_4 |
|[Ljava.lang.Object;@1a23b57f |my_other_string_5 |
|[Ljava.lang.Object;@3a101a1a |my_other_string_6 |
|[Ljava.lang.Object;@33846636 |my_other_string_7 |
|[Ljava.lang.Object;@521a0a3d |my_other_string_8 |
+-----------------------------+------------------+

>> df.printSchema()
root
 |-- my_column: string (nullable = true)
 |-- my_other_column: string (nullable = true)

如您所见,my_other_column列看起来与预期的一样。有什么办法,如何将my_column列中的对象转换为人类可读的字符串?

4

1 回答 1

0

雅罗斯拉夫,

我尝试使用以下代码,并使用了此处的示例镶木地板文件。我能够从数据框中获得所需的输出,您能否使用下面的代码片段以及上面提到的示例文件检查您的代码,看看是否还有其他问题:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Read a Parquet file").getOrCreate()
df = spark.read.parquet('E:\\...\\..\\userdata1.parquet')
df.show(10)
df.printSchema()

替换 HDFS 位置的路径。

数据框输出供您参考:

在此处输入图像描述

于 2019-09-02T06:35:14.267 回答