PySpark:TypeError:StructType不能接受类型<type'unicode'=“”>或<type'str'=“”>中的对象

时间:2017-12-07 16:50:37

标签: python python-2.7 apache-spark pyspark

我正在从CSV文件中读取数据,然后创建一个DataFrame。但是当我尝试访问DataFrame中的数据时,我得到了TypeError。

fields = [StructField(field_name, StringType(), True) for field_name in schema.split(',')]
schema = StructType(fields)

input_dataframe = sql_context.createDataFrame(input_data_1, schema)

print input_dataframe.filter(input_dataframe.diagnosis_code == '11').count()

'unicode'和'str'都不能与Spark DataFrame一起使用。我得到以下TypeError:

TypeError:StructType不能接受类型中的对象 TypeError:StructType不能接受类型

中的对象

我在'utf-8'中尝试编码如下,但仍然得到错误,但现在抱怨'str'的TypeError:

input_data_2 = input_data_1.map(lambda x: x.encode("utf-8"))
input_dataframe = sql_context.createDataFrame(input_data_2, schema)

print input_dataframe.filter(input_dataframe.diagnosis_code == '410.11').count()

我还尝试使用param use_unicode = True / False直接解析CSV作为utf-8或unicode

1 个答案:

答案 0 :(得分:2)

在线之间阅读。你是

  

从CSV文件中读取数据

并获取

TypeError: StructType can not accept object in type <type 'unicode'>

这是因为您传递的字符串不是与struct兼容的对象。可能你传递的数据如下:

input_data_1 = sc.parallelize(["1,foo,2", "2,bar,3"])

和架构

schema = "x,y,z"

fields = [StructField(field_name, StringType(), True) for field_name in schema.split(',')]
schema = StructType(fields)

你希望Spark能够解决问题。但它不会那样工作。你可以

input_dataframe = sqlContext.createDataFrame(input_data_1.map(lambda s: s.split(",")), schema)

但老实说,只需使用Spark csv阅读器:

spark.read.schema(schema).csv("/path/to/file")