Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Spark SQL:有没有办法区分同名列?_Sql_Apache Spark_Apache Spark Sql - Fatal编程技术网

Spark SQL:有没有办法区分同名列?

Spark SQL:有没有办法区分同名列?,sql,apache-spark,apache-spark-sql,Sql,Apache Spark,Apache Spark Sql,我有一个带有标题的csv,标题中的列具有相同的名称 我想只使用SQL使用spark处理它们,并且能够明确地引用这些列 例: 我只想使用sparksql获取第一个名称列,正如注释中提到的,我认为不太容易出错的方法是更改输入数据的模式 然而,如果您正在寻找一种快速的解决方法,您可以简单地为列的重复名称编制索引 例如,让我们创建一个包含三个id列的数据框架 val df=spark.Range 3 .选择'id*2作为id',id*3作为x',id',id*4作为y',id df.show +--+-

我有一个带有标题的csv,标题中的列具有相同的名称

我想只使用SQL使用spark处理它们,并且能够明确地引用这些列

例:


我只想使用sparksql获取第一个名称列,正如注释中提到的,我认为不太容易出错的方法是更改输入数据的模式

然而,如果您正在寻找一种快速的解决方法,您可以简单地为列的重复名称编制索引

例如,让我们创建一个包含三个id列的数据框架

val df=spark.Range 3 .选择'id*2作为id',id*3作为x',id',id*4作为y',id df.show +--+--+--+--+--+ |id | x | id | y | id| +--+--+--+--+--+ | 0| 0| 0| 0| 0| | 2| 3| 1| 4| 1| | 4| 6| 2| 8| 2| +--+--+--+--+--+ 然后我可以使用toDF设置新列名。让我们考虑一下,我知道只有ID是复制的。如果我们不这样做,添加额外的逻辑以确定哪些列是重复的将不会很困难

变量i=-1 val names=df.columns.map n=> ifn==id{ i+=1 锡德一世 }其他 val new_df=df.todfname:_* 新秀 +--+--+--+--+--+ |id|0 | x | id|1 | y | id|2| +--+--+--+--+--+ | 0| 0| 0| 0| 0| | 2| 3| 1| 4| 1| | 4| 6| 2| 8| 2| +--+--+--+--+--+
也许是通过使用列的序数值,但这很糟糕;特别是如果您的列顺序发生变化…请选择id,2作为名称、年龄、csv高度,以便更好地请求将csv列标题值更改为唯一。是的,预处理是最好的解决方案,我不确定这里是否有选项。您是如何使用该模式的?它是连接的结果吗?它是由第三方提供的。
id name   age height name 
1  Alex   23  1.70 
2  Joseph 24  1.89