dataframe TypeError: StructType can not accept object

ewm0tg9j  于 2021-05-18  发布在  Spark
关注(0)|答案(3)|浏览(1790)

我有一个python中的字符串列表,如下所示:

['start_column=column123;to_3=2020-09-07 10:29:24;to_1=2020-09-07 10:31:08;to_0=2020-09-07 10:31:13;',
'start_column=column475;to_3=2020-09-07 10:29:34;']

我正试图通过以下方式将其转换为Dataframe:

schema = StructType([
    StructField('Rows', ArrayType(StringType()), True)
])

rdd = sc.parallelize(test_list)
query_data = spark.createDataFrame(rdd,schema)
print(query_data.schema)
query_data.show()

我收到以下错误:

TypeError: StructType can not accept object
lrl1mhuk

lrl1mhuk1#

您只需在创建Dataframe时将其作为列表传递,如下所示。。。

a_list = ['start_column=column123;to_3=2020-09-07 10:29:24;to_1=2020-09-07 10:31:08;to_0=2020-09-07 10:31:13;',
'start_column=column475;to_3=2020-09-07 10:29:34;']
sparkdf = spark.createDataFrame([a_list],["col1", "col2"])
sparkdf.show(truncate=False)

+--------------------------------------------------------------------------------------------------+------------------------------------------------+
|col1                                                                                              |col2                                            |
+--------------------------------------------------------------------------------------------------+------------------------------------------------+
|start_column=column123;to_3=2020-09-07 10:29:24;to_1=2020-09-07 10:31:08;to_0=2020-09-07 10:31:13;|start_column=column475;to_3=2020-09-07 10:29:34;|
+--------------------------------------------------------------------------------------------------+------------------------------------------------+
kse8i1jr

kse8i1jr2#

你应该使用 schema = StringType() 因为您的行包含字符串而不是字符串的结构。

rsaldnfx

rsaldnfx3#

我有两种可能的解决办法。
解决方案1:假设您想要一个只有一行的Dataframe
我可以通过将test\u列表中的值 Package 在圆括号中并使用stringtype使其工作。

v = [('start_column=column123;to_3=2020-09-07 10:29:24;to_1=2020-09-07 10:31:08;to_0=2020-09-07 10:31:13;',
'start_column=column475;to_3=2020-09-07 10:29:34;')]

schema = StructType([
    StructField('col_1', StringType(), True), 
    StructField('col_2', StringType(), True), 

])

rdd = sc.parallelize(v)
query_data = spark.createDataFrame(rdd,schema)
print(query_data.schema)
query_data.show(truncate = False)

解决方案2:假设您想要一个只有一列的Dataframe

v = ['start_column=column123;to_3=2020-09-07 10:29:24;to_1=2020-09-07 10:31:08;to_0=2020-09-07 10:31:13;',
'start_column=column475;to_3=2020-09-07 10:29:34;']

from pyspark.sql.types import StringType

df = spark.createDataFrame(v, StringType())

df.show(truncate = False)

相关问题