DataFrame到Spark中的Json数组

use*_*629 4 java arrays json apache-spark

我正在用Java编写Spark应用程序,该应用程序读取HiveTable并将输出以Json格式存储在HDFS中。

我使用读取了配置单元表HiveContext,它返回了DataFrame。下面是代码片段。

 SparkConf conf = new SparkConf().setAppName("App");
 JavaSparkContext sc = new JavaSparkContext(conf);
 HiveContext hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);

DataFrame data1= hiveContext.sql("select * from tableName")
Run Code Online (Sandbox Code Playgroud)

现在我想转换DataFrameJsonArray。例如,data1数据如下所示

|  A  |     B     |
-------------------
|  1  | test      |
|  2  | mytest    |
Run Code Online (Sandbox Code Playgroud)

我需要如下输出

[{1:"test"},{2:"mytest"}]
Run Code Online (Sandbox Code Playgroud)

我尝试使用data1.schema.json(),它给了我下面的输出,而不是数组。

{1:"test"}
{2:"mytest"}
Run Code Online (Sandbox Code Playgroud)

什么是正确的做法或功能转换DataFramejsonArray不使用任何第三方库。

phi*_*ert 5

data1.schema.json将为您提供一个JSON字符串,其中包含数据框的架构,而不是实际数据本身。你会得到 :

String = {"type":"struct",
          "fields":
                  [{"name":"A","type":"integer","nullable":false,"metadata":{}},
                  {"name":"B","type":"string","nullable":true,"metadata":{}}]}
Run Code Online (Sandbox Code Playgroud)

要将您的数据toJSON框转换为JSON数组,您需要使用DataFrame的方法:

val df = sc.parallelize(Array( (1, "test"), (2, "mytest") )).toDF("A", "B")
df.show()

+---+------+
|  A|     B|
+---+------+
|  1|  test|
|  2|mytest|
+---+------+

df.toJSON.collect.mkString("[", "," , "]" )
String = [{"A":1,"B":"test"},{"A":2,"B":"mytest"}]
Run Code Online (Sandbox Code Playgroud)