Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark在创建数据帧时出错:';StructField';对象没有属性';编码';_Python_Pyspark - Fatal编程技术网

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
。一份普通的清单是不够的

  • 从原始RDD创建元组或列表的RDD
  • 在步骤1中创建的RDD中,创建由匹配元组或列表结构的
    StructType
    表示的模式
  • 通过SparkSession提供的createDataFrame方法将模式应用于RDD
  • 另外,
    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?