我正在从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
答案 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")