Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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
Scala I';如果一个表的列数据类型为Map,我如何分解它以生成两列,一列为Map,一列为key? +---------------------------------------------------------++------+ |姓名|年龄|身份| +---------------------------------------------------------++------+ |“SUBHAJIT SEN”:28,“Biny MONDAL”:26,“SHANTANU DUTTA”:35 | | 15| |“戈比纳桑SP”:35,“严酷的笈多”:27,“拉胡尔·阿南德”:26 | | 16| +---------------------------------------------------------++------+_Scala_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

Scala I';如果一个表的列数据类型为Map,我如何分解它以生成两列,一列为Map,一列为key? +---------------------------------------------------------++------+ |姓名|年龄|身份| +---------------------------------------------------------++------+ |“SUBHAJIT SEN”:28,“Biny MONDAL”:26,“SHANTANU DUTTA”:35 | | 15| |“戈比纳桑SP”:35,“严酷的笈多”:27,“拉胡尔·阿南德”:26 | | 16| +---------------------------------------------------------++------+

Scala I';如果一个表的列数据类型为Map,我如何分解它以生成两列,一列为Map,一列为key? +---------------------------------------------------------++------+ |姓名|年龄|身份| +---------------------------------------------------------++------+ |“SUBHAJIT SEN”:28,“Biny MONDAL”:26,“SHANTANU DUTTA”:35 | | 15| |“戈比纳桑SP”:35,“严酷的笈多”:27,“拉胡尔·阿南德”:26 | | 16| +---------------------------------------------------------++------+,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,我已将Name_Age列分解为多行: Hive Table: (Name_Age: Map[String, Int] and ID: Int) +-------------------+ |姓名和年龄| +-------------------+ |[SUBHAJIT SEN,28]| |[比诺·蒙达尔,26]| |[沙塔努·杜塔,35]| |[戈比纳桑SP,35]| |[古普塔,27]| |[拉胡尔·阿南德,26]| +-------------------+ 但我想分解并创建两行:Nam

我已将Name_Age列分解为多行:

Hive Table: (Name_Age: Map[String, Int] and ID: Int)
+-------------------+
|姓名和年龄|
+-------------------+
|[SUBHAJIT SEN,28]|
|[比诺·蒙达尔,26]|
|[沙塔努·杜塔,35]|
|[戈比纳桑SP,35]|
|[古普塔,27]|
|[拉胡尔·阿南德,26]|
+-------------------+
但我想分解并创建两行:Name和Age

+-------------------+-------+
|姓名|年龄|
+-------------------+-------+
|SUBHAJIT SEN | 28|
|比诺·蒙达尔| 26 |
|SHANTANU DUTTA | 35|
|戈比纳桑SP | 35|
|刺耳的古普塔| 27|
|拉胡尔·阿南德| 26|
+-------------------+-------+

有人能帮我修改爆炸代码吗

这里您只需放下
touper
调用
explode
函数:

def toUpper(name: Seq[String]) =  (name.map(a => a.toUpperCase)).toSeq

sqlContext.udf.register("toUpper",toUpper _)

var df = sqlContext.sql("SELECT toUpper(name) FROM namelist").toDF("Name_Age")

df.explode(df("Name_Age")){case org.apache.spark.sql.Row(arr: Seq[String]) => arr.toSeq.map(v => Tuple1(v))}.drop(df("Name_Age")).withColumnRenamed("_1","Name_Age")
之后,您可以使用内置函数将其转换为大写:

import org.apache.spark.sql.functions.explode

val df = Seq((Map("foo" -> 1, "bar" -> 2), 1)).toDF("name_age", "id")
val exploded = df.select($"id", explode($"name_age")).toDF("id", "name", "age")
exploded.printSchema

// root
//  |-- id: integer (nullable = false)
//  |-- name: string (nullable = false)
//  |-- age: integer (nullable = false)
import org.apache.spark.sql.functions.upper

exploded.withColumn("name", upper($"name"))