Python 如何从pysparksql上的一个大表中选择除2列以外的所有列?
在连接两个表时,我想从一个大型表中选择除其中2列以外的所有列,该表在databricks上的pyspark sql上有许多列 我的pyspark sql:Python 如何从pysparksql上的一个大表中选择除2列以外的所有列?,python,sql,apache-spark,pyspark,hive,Python,Sql,Apache Spark,Pyspark,Hive,在连接两个表时,我想从一个大型表中选择除其中2列以外的所有列,该表在databricks上的pyspark sql上有许多列 我的pyspark sql: %sql set hive.support.quoted.identifiers=none; select a.*, '?!(b.year|b.month)$).+' from MY_TABLE_A as a left join MY_TABLE_B as b on a.year = b.year and a.mon
%sql
set hive.support.quoted.identifiers=none;
select a.*, '?!(b.year|b.month)$).+'
from MY_TABLE_A as a
left join
MY_TABLE_B as b
on a.year = b.year and a.month = b.month
我跟着
但是,这对我不起作用。所有列都在结果中。
我想删除重复的列(结果中的年和月)
感谢使用pyspark,您可以执行以下操作:
df.select([col for col in df.columns if c not in {'col1', 'col2', 'col3'}])
其中df是执行联接操作后产生的数据帧。设置hive.support.quoted.identifiers=none在Spark中不受支持 相反,在Spark
中,将Spark.sql.parser.quotedRegexColumnNames=true设置为
获得与蜂巢相同的行为
示例:
df=spark.createDataFrame([(1,2,3,4)],['id','a','b','c'])
df.createOrReplaceTempView("tmp")
spark.sql("SET spark.sql.parser.quotedRegexColumnNames=true")
#select all columns except a,b
sql("select `(a|b)?+.+` from tmp").show()
#+---+---+
#| id| c|
#+---+---+
#| 1| 4|
#+---+---+
写下所有列是否会超过最大查询长度?您可以查询系统表以获取列,但这可能不是一个好主意。将它们全部写下来可能需要很长时间,但执行速度要比使用某些系统表来计算列快。查询中的列太多,无法键入这些列。@user3448011,如果答案有助于解决问题的话。。您能否投票并接受关闭此线程的答案!:-)