Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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 使用spark sql将Json WrappedArray转换为字符串_Scala_Apache Spark_Apache Zeppelin - Fatal编程技术网

Scala 使用spark sql将Json WrappedArray转换为字符串

Scala 使用spark sql将Json WrappedArray转换为字符串,scala,apache-spark,apache-zeppelin,Scala,Apache Spark,Apache Zeppelin,我正在制作齐柏林飞艇笔记本,并尝试使用sql从表中加载数据。 在表中,每行有一列,这是一个JSON blob。例如,[{'timestamp':12345,'value':10},{'timestamp':12346,'value':11},{'timestamp':12347,'value':12}] 我想选择JSON blob作为字符串,就像原始字符串一样。但spark会自动将其作为WrappedArray加载 似乎我必须编写一个UDF来将WrappedArray转换为字符串。下面是我的代码

我正在制作齐柏林飞艇笔记本,并尝试使用sql从表中加载数据。 在表中,每行有一列,这是一个JSON blob。例如,
[{'timestamp':12345,'value':10},{'timestamp':12346,'value':11},{'timestamp':12347,'value':12}]

我想选择JSON blob作为字符串,就像原始字符串一样。但spark会自动将其作为WrappedArray加载

似乎我必须编写一个UDF来将WrappedArray转换为字符串。下面是我的代码

我首先定义一个Scala函数,然后注册该函数。然后在列上使用注册函数

val unwraparr = udf ((x: WrappedArray[(Int, Int)]) => x.map { case Row(val1: String) =>  + "," + val2 })
sqlContext.udf.register("fwa", unwraparr)
它不起作用。如果有人能帮忙,我将不胜感激

下面是我正在处理的部件的模式。将有许多数量和时间戳对

-- targetColumn: array (nullable = true)
    |-- element: struct (containsNull = true)
    |    |-- value: long (nullable = true)
    |    |-- timeStamp: string (nullable = true)
更新: 我提出了以下代码:

val f = (x: Seq[Row]) => x.map { case Row(val1: Long, val2: String) => x.mkString("+") }

我需要它将objects/struct/row(不确定如何调用struct)连接到单个字符串

如果您在
spark
中加载的数据作为
dataframe
/
dataset
schema
如下所示

+------------------------------------+
|targetColumn                        |
+------------------------------------+
|[[12345,10], [12346,11], [12347,12]]|
|[[12345,10], [12346,11], [12347,12]]|
+------------------------------------+

root
 |-- targetColumn: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- timeStamp: string (nullable = true)
 |    |    |-- value: long (nullable = true)
然后您可以将
dataframe
作为
json
写入临时json文件,并将其作为文本文件读取,然后解析
字符串行
,并将其转换为
dataframe
,如下所示(
/home/testing/test.json
是临时
json
文件位置)

这将为您留下以下
dataframe
schema

+--------------------------------------------------------------------------------------------------+
|targetColumn                                                                                      |
+--------------------------------------------------------------------------------------------------+
|{"timeStamp":"12345","value":10},{"timeStamp":"12346","value":11},{"timeStamp":"12347","value":12}|
|{"timeStamp":"12345","value":10},{"timeStamp":"12346","value":11},{"timeStamp":"12347","value":12}|
+--------------------------------------------------------------------------------------------------+

root
 |-- targetColumn: string (nullable = true)
我希望答案是有帮助的

最初作为文本而不是数据帧读取


您可以使用我回答的第二阶段,即从json文件读取和解析,进入获取数据帧的第一阶段。

您可以使用
数据帧的
模式
进行更新吗?只要复制粘贴
dataframe.printSchema()
@RameshMaharjan的输出,它就被更新了。谢谢请更新所需的输出。@Ankussingh设计的输出是:{'timestamp':12345,'value':10},{'timestamp':12346,'value':11},{'timestamp':12347,'value':12}。现在,zipplin中显示的列是WrappedArray([1012345]、[1112346]、[1212347])。该列将自动解析,但我需要原始json字符串。@Ryan请查看下面我的更新答案。:)
+--------------------------------------------------------------------------------------------------+
|targetColumn                                                                                      |
+--------------------------------------------------------------------------------------------------+
|{"timeStamp":"12345","value":10},{"timeStamp":"12346","value":11},{"timeStamp":"12347","value":12}|
|{"timeStamp":"12345","value":10},{"timeStamp":"12346","value":11},{"timeStamp":"12347","value":12}|
+--------------------------------------------------------------------------------------------------+

root
 |-- targetColumn: string (nullable = true)