Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Spark Dataframe - Fatal编程技术网

使用Spark SQL将列拆分为多列

使用Spark SQL将列拆分为多列,sql,apache-spark,apache-spark-sql,spark-dataframe,Sql,Apache Spark,Apache Spark Sql,Spark Dataframe,我有一列col1,表示GPS坐标格式: 25 4.1866N 55 8.3824E 我想根据空格作为分隔符将其拆分为多列,如下面的输出示例表所示: 考虑到存在拆分功能,我尝试了以下方法: SELECT explode(split(`col1`, ' ')) AS `col` FROM table_example; 但是,它不是按多列拆分,而是按多行拆分,如下面的输出所示: 有人能告诉我哪种方法是获得预期结果的有效方法吗?如果您有一个数据帧作为 +---------------------+ |

我有一列col1,表示GPS坐标格式:

25 4.1866N 55 8.3824E

我想根据空格作为分隔符将其拆分为多列,如下面的输出示例表所示:

考虑到存在拆分功能,我尝试了以下方法:

SELECT explode(split(`col1`, ' ')) AS `col` FROM table_example;
但是,它不是按多列拆分,而是按多行拆分,如下面的输出所示:


有人能告诉我哪种方法是获得预期结果的有效方法吗?

如果您有一个数据帧作为

+---------------------+
|col                  |
+---------------------+
|25 4.1866N 55 8.3824E|
+---------------------+
使用scalaapi

您可以简单地使用split内置函数,并根据需要进行适当选择

import org.apache.spark.sql.functions._
df.withColumn("split", split(col("col"), " "))
    .select(col("split")(0).as("1st_split"), col("split")(1).as("2nd_split"),col("split")(2).as("3rd_split"),col("split")(3).as("4th_split"))
  .show(false)
那会给你什么

+---------+---------+---------+---------+
|1st_split|2nd_split|3rd_split|4th_split|
+---------+---------+---------+---------+
|25       |4.1866N  |55       |8.3824E  |
+---------+---------+---------+---------+
使用SQL方式

Sql更简单,并且与api方式类似

df.createOrReplaceTempView("table_example")
val splitted = sqlContext.sql("SELECT split(`col`, ' ') AS `col` FROM table_example")

splitted.createOrReplaceTempView("splitted_table")
val result = sqlContext.sql("SELECT `col`[0] AS `1st_split`, `col`[1] AS `2nd_split`, `col`[2] AS `3rd_split`, `col`[3] AS `4th_split` FROM splitted_table")
result.show(false)

我希望答案是有用的

,但这与标准SQL方法略有不同。我是说。。。我无法在SQL上下文中使用该语法。在您的回答中,我认为您正在对dataframe使用pyspark语法。假设您无法帮助我解决SQL方面的问题,您是否知道如何使用java或python语法表示相同的scala片段?感谢SQL示例!如果你能给我提供一个java示例,那就太好了。因为Scala示例对我的案例/场景不太有用。我认为它们非常相似。这就是我在一个查询中搜索的纯SQL:选择列[0]作为第一个拆分,列[1]作为第二个拆分,列[2]作为第三个拆分,列[3]作为第四个拆分,从选择拆分列中选择,'作为示例表中的列。。。但您用SQL示例向我建议了正确的方法:-
df.createOrReplaceTempView("table_example")
val splitted = sqlContext.sql("SELECT split(`col`, ' ') AS `col` FROM table_example")

splitted.createOrReplaceTempView("splitted_table")
val result = sqlContext.sql("SELECT `col`[0] AS `1st_split`, `col`[1] AS `2nd_split`, `col`[2] AS `3rd_split`, `col`[3] AS `4th_split` FROM splitted_table")
result.show(false)