Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除Spark dataframe中有句点的列名_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 删除Spark dataframe中有句点的列名

Python 删除Spark dataframe中有句点的列名,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,在Spark数据帧中删除一个有周期的列时遇到问题。我知道您需要使用倒勾(`)来转义列名。当我尝试选择列时,这就起作用了,事实上,我已经编写了自己的小静态函数来转义所有列名: @staticmethod def escape(列): 返回[“`+col+”`“if.”在col-else列中表示col-in列中的col] 然后,可以使用此选项获取所需的列列表,以便通过以下方式进行选择: required_columns=MySparkClass.escape( 列表(筛选器(lambda col:

在Spark数据帧中删除一个有周期的列时遇到问题。我知道您需要使用倒勾(`)来转义列名。当我尝试选择列时,这就起作用了,事实上,我已经编写了自己的小静态函数来转义所有列名:

@staticmethod
def escape(列):
返回[“`+col+”`“if.”在col-else列中表示col-in列中的col]
然后,可以使用此选项获取所需的列列表,以便通过以下方式进行选择:

required_columns=MySparkClass.escape(
列表(筛选器(lambda col:re.search('targetregexstufhere',col),target_df.columns))
)
过滤的_df=df.选择(所需的_列)
使用一个简单、可重复的示例:

same=sqlContext.createDataFrame(
[
(1,1,'A','2017-01-01'),
(2,3,'B','2017-01-02'),
(3,5,'A','2017-01-03'),
(4,7,'B','2017-01-04')
],
('index','X','label.X.L','date')
)
打印(相同的.select('`label.X.L.`').collect())
这里的输出是:

[行(label.X.L.='A')、行(label.X.L.='B')、行(label.X.L.='A')、行(label.X.L.='B')]
但是,删除反勾号会导致出现
AnalysisException

pyspark.sql.utils.AnalysisException:“属性名称中的语法错误:label.X.L.;”
但是,当我尝试删除
label.X.L.
列时,反勾号似乎没有任何区别:

print(相同的.drop('`label.X.L.`').collect())
输出为

[行(索引=1,X=1,标签.X.L.='A',日期='2017-01-01'),
行(索引=2,X=3,标签X.L.='B',日期='2017-01-02'),
世界其他地区(索引=3,X=5,标签X.L.='A',日期='2017-01-03'),
世界其他地区(索引=4,X=7,标签X.L.='B',日期='2017-01-04')]

删除名称中包含句点的列的正确方法是什么?

指定用于
select()
drop()
的列的语法略有不同。当您的列名中有一个句点表示
select()

但是,当您尝试删除时:

same.drop('label.X.L.') # note the absence of the backticks

你能加一个吗?我无法复制你的问题。请阅读更多内容。另一种删除列的方法是选择所有其他列:
df=df.select(*[c代表df.columns中的c,如果c!=“favorite_country_.U.S.A]”)
@pault我添加了一个有趣的示例-
drop()
似乎对我有效,没有背景标记:
print(same.drop('label.X.L.).collect())
-什么版本的spark?@pault嗯,你说得对。我觉得自己像个白痴。如果我只是执行
打印(same.drop('label.X.L.)).collect())
我就得到了所需的输出。所以看起来
drop()
不需要反勾号,但是
select()
需要反勾号?
same.drop('label.X.L.') # note the absence of the backticks