Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 scala中的数据帧创建映射_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

从spark scala中的数据帧创建映射

从spark scala中的数据帧创建映射,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我在数据框中有一个json字符串,如下所示 aaa | bbb | ccc |ddd | eee -------------------------------------- 100 | xxxx | 123 |yyy|2017 100 | yyyy | 345 |zzz|2017 200 | rrrr | 500 |qqq|2017 300 | uuuu | 200 |ttt|2017 200 | iiii | 500 |

我在数据框中有一个json字符串,如下所示

  aaa  |  bbb |  ccc |ddd | eee          
 --------------------------------------
   100 | xxxx |  123 |yyy|2017
   100 | yyyy |  345 |zzz|2017
   200 | rrrr |  500 |qqq|2017
   300 | uuuu |  200 |ttt|2017
   200 | iiii |  500 |ooo|2017
我想得到结果

 {100,[{xxxx:{123,yyy}},{yyyy:{345,zzz}}],2017}
 {200,[{rrrr:{500,qqq}},{iiii:{500,ooo}}],2017}
 {300,[{uuuu:{200,ttt}}],2017}
请帮助这项工作:

 val df = data
    .withColumn("cd", array('ccc, 'ddd)) // create arrays of c and d
    .withColumn("valuesMap", map('bbb, 'cd)) // create mapping
    .withColumn("values", collect_list('valuesMap) // collect mappings
                 .over(Window.partitionBy('aaa)))
    .withColumn("eee", first('eee) // e is constant, just get first value of Window
                 .over(Window.partitionBy('aaa)))
   .select("aaa", "values", "eee") // select only columns that are in the question selected
   .select(to_json(struct("aaa", "values", "eee")).as("value")) // create JSON
一定要这样做

import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._`

您可以使用
lit()
创建一个映射,将值定义为常量,或者使用
$“col\u name”
从数据框中的其他列获取它们,如下所示:

val new_df = df.withColumn("map_feature", map(lit("key1"), lit("value1"), lit("key2"), $"col2"))

你的标题和问题根本不匹配。我应该提到什么?你建议的输出不是json。谢谢Gaweda。但partitionby不起作用。但现在的要求是改变。我有一份清单below@gayathri“不工作”是什么意思?我已经用你的数据测试过了。如果您想拥有纯字符串列表,可以使用IntelliJ(scala 2.10.6)执行collect()Hi Gaweda,iam。使用column(“valuesMap”,map('bbb,'cd)),无法识别map,也无法识别aso over(Window.partitionBy('aaa))。我已经导入了sql.functions Pls helpmap是在functions对象内部,所以它应该是可见的