我正在实现的答案提到here。这是我的结构体,我想添加一个新的col。
root
|-- shops: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- epoch: double (nullable = true)
| | |-- request: string (nullable = true)
所以我执行了这个
from pyspark.sql import functions as F
df = new_df.withColumn('state', F.col('shops').withField('a', F.lit(1)))
df.printSchema()
但我得到这个错误
TypeError Traceback (most recent call last)
<ipython-input-47-1749b2131995> in <module>
1 from pyspark.sql import functions as F
----> 2 df = new_df.withColumn('state', F.col(‘shops’).withField('a', F.lit(1)))
3 df.printSchema()
TypeError: 'Column' object is not callable
编辑:我的版本是Python 39 Spark 3.0.3(最大可能)
2条答案
按热度按时间xzlaal3s1#
尝试使用
transform
高阶函数,因为您正在尝试向array
添加新列。Example:
UPDATE:
使用
Spark-sql
:pprl5pva2#
您的问题是您正在对
ArrayType
类型的列(您的shops
列)而不是StructType
类型的列使用withField
方法。您可以通过使用
pyspark.sql.functions
的transform
函数来修复此问题。从文档中:对输入数组中的每个元素应用转换后,返回元素数组。
首先,让我们创建一些输入数据:
现在使用
transform
函数对shops
列的每个元素应用withField
操作。