创建数据框时我遇到了一个小问题:
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'
Run Code Online (Sandbox Code Playgroud)
我没有发现我的代码有什么问题(它太简单了,我觉得很愚蠢)。但我无法让它发挥作用。你能为我指出正确的方向吗?
Jes*_*ano 11
你大部分时间都在那里!
当您调用createDataFrame 指定架构时,该架构必须是StructType. 一个普通的列表是不够的。
- 从原始 RDD 创建元组或列表的 RDD;
- 创建由与步骤 1 中创建的 RDD 中的元组或列表的结构相匹配的模式表示。
StructType- 通过 SparkSession 提供的 createDataFrame 方法将模式应用到 RDD。
此外,中的第一个字段createDataFrame是行列表,而不是一行的值列表。所以单个一维列表会导致错误。将其包装在一个字典中,明确标识哪些列保存哪些值是一种解决方案,但可能还有其他解决方案。
结果应该类似于:
df_test = spark.createDataFrame(
[{'col1': 'a string', 'col2': 1}],
schema = types.StructType([
types.StructField('col1', types.StringType(), True),
types.StructField('col2', types.IntegerType(), True)
])
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3941 次 |
| 最近记录: |