Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 如何从pysparksql上的一个大表中选择除2列以外的所有列?_Python_Sql_Apache Spark_Pyspark_Hive - Fatal编程技术网

Python 如何从pysparksql上的一个大表中选择除2列以外的所有列?

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

在连接两个表时,我想从一个大型表中选择除其中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.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,如果答案有助于解决问题的话。。您能否
投票并接受关闭此线程的答案!:-)