如何从 Spark 数据帧列名称中删除"."?
重命名包含"."的列名的DataFrame.select(F.col().alias())
方法会引发错误。
以下代码是可重现的。
# import Spark libraries, configuration, Contexts, and types.
import pyspark
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
#############
# Start Spark.
spark = SparkSession.builder.appName("test").getOrCreate()
testdf = spark.createDataFrame([
(1, "Julie", "CEO"),
(2, "Janice", "CFO"),
(3, "Jake", "CTO")],
["ID", "First Name", "Title Initial."])
# this works just fine.
testdf.select(F.col('First Name').alias('first_name')).show(3)
# This throws an error.
testdf.select(F.col('Title Initial.').alias('title')).show(3)
错误:
AnalysisException: u'syntax error in attribute name: Title Initial.;'
更改包含"."的数据帧列名称的替代方法是什么?
用
`
将列名括起来
testdf.select(F.col('`Title Initial.`').alias('title')).show(3)
今天我在 Python 3.9.16 的 PySpark 3.3.1 中遇到了同样的问题,在列的开头和结尾添加"就可以了。
...
col_name = 'No.'
df = df.withColumn(col_name, df[col_name].cast('bigint'))
将引发错误:AnalysisException: syntax error in attribute name: No.
添加"后,它可以工作:
df = df.withColumn(col_name, df["`"+col_name+"`"].cast('bigint'))