从Spark DataFrame列名中删除“.”

t1rydlwq  于 2023-02-24  发布在  Apache
关注(0)|答案(2)|浏览(160)

如何从Spark DataFrame列名中删除.“”?
重命名包含.“”的列名的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.;'

更改其中包含.“”的DataFrame列名的替代方法是什么?

6gpjuf90

6gpjuf901#

用```括起列名

testdf.select(F.col('`Title Initial.`').alias('title')).show(3)
odopli94

odopli942#

今天我在PySpark 3.3.1和Python 3.9.16中遇到了同样的问题,在列的开头和结尾添加''可以工作。

...
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'))

相关问题