pyspark数据框的区分大小写的列删除操作?

Posted

技术标签:

【中文标题】pyspark数据框的区分大小写的列删除操作?【英文标题】:Case sensitive column drop operation for pyspark dataframe? 【发布时间】:2019-10-11 01:50:48 【问题描述】:

通过一些简短的测试,pyspark 数据帧的列删除功能似乎不区分大小写,例如。

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
import sys

sparkSession = SparkSession.builder.appName("my-session").getOrCreate()

dff = sparkSession.createDataFrame([(10,123), (14,456), (16,678)], ["age", "AGE"])

>>> dff.show()
+---+---+
|age|AGE|
+---+---+
| 10|123|
| 14|456|
| 16|678|
+---+---+

>>> dff.drop("AGE")
DataFrame[]

>>> dff_dropped = dff.drop("AGE")
>>> dff_dropped.show()
++
||
++
||
||
||
++

"""
What I'd like to see here is:
+---+
|age|
+---+
| 10|
| 14|
| 16|
+---+
"""

有没有办法以区分大小写的方式删除数据框列? (在 spark JIRA discussions 中看到了一些与此类相关的 cmets,但正在寻找仅适用于 drop() 操作的特定方式(不是全局/持久设置) )。

【问题讨论】:

【参考方案1】:
#Add this before using drop
sqlContext.sql("set spark.sql.caseSensitive=true")

如果您有两列有 同名

【讨论】:

这是持久性的吗(即,我是否需要在 drop() 之后的行中调用 sqlContext.sql("set spark.sql.caseSensitive=false") 才能使数据帧操作像以前一样运行)? 请注意任何找到此答案的人:从我在原始帖子中的代码中,您还需要执行 from pyspark.sql import SQLContextsqlContext = SQLContext(sparkSession.sparkContext) 才能使用此答案使用的 sqlContext 对象。

以上是关于pyspark数据框的区分大小写的列删除操作?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:为啥不区分大小写的列上的 SELECT 比区分大小写的列更快?

如何在 MySQL 中使用 JPA 自动生成区分大小写的列

由于 ApplyMapping 不区分大小写,如何确定我需要哪些列?

将 PySpark 数据框的列与标量相乘

Rails validates_uniqueness_of 跨越多个不区分大小写的列

在 Pandas DataFrame 的列中查找并替换所有匹配但不区分大小写的字符串