【发布时间】:2020-11-26 11:20:59
【问题描述】:
Spark 版本 2.4.5 版
>> from pyspark.sql.functions import col
>> data = [('a',),
('b',)]
>> df = spark.createDataFrame(data, ("col.name",))
>> df.printSchema()
root
|-- col.name: string (nullable = true)
这一行的执行
>> df.withColumn("col.name.new",col("col.name")).show()
给出这个错误
Traceback (most recent call last):
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw)
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o1187.withColumn.
: org.apache.spark.sql.AnalysisException: cannot resolve '`col.name`' given input columns: [col.name]
但是这行得通
>> df.withColumn("col.name.new",col("`col.name`")).show()
+--------+------------+
|col.name|col.name.new|
+--------+------------+
| a| a|
| b| b|
+--------+------------+
pyspark.sql.functions.col(col) 根据给定的列名返回一个列。
第一次尝试应该会成功。
你知道为什么没有吗?
【问题讨论】:
-
谢谢@cronoik,你知道这是否也适用于spark>=3.0.0?
-
嗯,根据错误报告应该不是这种情况,但我没有测试过。
-
我检查了 spark==3.0.1 这仍然是一个错误。
-
很高兴知道。这意味着您仍应避免使用点或替换列名。
标签: apache-spark pyspark