Python Pyspark在创建数据帧时出错:';StructField';对象没有属性';编码';
在创建数据帧时,我面临一个小问题:Python Pyspark在创建数据帧时出错:';StructField';对象没有属性';编码';,python,pyspark,Python,Pyspark,在创建数据帧时,我面临一个小问题: from pyspark.sql import SparkSession, types spark = SparkSession.builder.appName('test').getOrCreate() df_test = spark.createDataFrame( ['a string', 1], schema = [ types.StructField('col1', types.StringType(), True
from pyspark.sql import SparkSession, types
spark = SparkSession.builder.appName('test').getOrCreate()
df_test = spark.createDataFrame(
['a string', 1],
schema = [
types.StructField('col1', types.StringType(), True),
types.StructField('col2', types.IntegerType(), True)
]
)
## AttributeError: 'StructField' object has no attribute 'encode'
我看不出我的代码有什么问题(它太简单了,我觉得自己很笨)。但我不能让它工作。你能给我指一下正确的方向吗?你在那里走了大半段路 调用
createDataFrame
时,架构需要是StructType
。一份普通的清单是不够的
StructType
表示的模式createDataFrame
中的第一个字段是行列表,而不是一行的值列表。因此,单个一维列表将导致错误。将其包装在dict中,明确标识哪些列包含哪些值是一种解决方案,但可能还有其他解决方案
结果应该类似于:
df_test = spark.createDataFrame(
[{'col1': 'a string', 'col2': 1}],
schema = types.StructType([
types.StructField('col1', types.StringType(), True),
types.StructField('col2', types.IntegerType(), True)
])
)
这仅在每列中有一个值时有效。如何添加多行?i、 e.如何用['a,'b','c']替换'a string',以及类似地替换col2?