Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark Spark SQL将数组扩展到多列_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark SQL将数组扩展到多列

Apache spark Spark SQL将数组扩展到多列,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我在S3中存储来自oracle源的每一行更新的json消息。 json结构如下所示 { "tableName": "ORDER", "action": "UPDATE", "timeStamp": "2016-09-04 20:05:08.000000", "uniqueIdentifier": "31200477027942016-09-05 20:05:08.000000", "columnList": [{ "columnName":

我在S3中存储来自oracle源的每一行更新的json消息。 json结构如下所示

{
    "tableName": "ORDER",
    "action": "UPDATE",
    "timeStamp": "2016-09-04 20:05:08.000000",
    "uniqueIdentifier": "31200477027942016-09-05 20:05:08.000000",
    "columnList": [{
        "columnName": "ORDER_NO",
        "newValue": "31033045",
        "oldValue": ""
    }, {
        "columnName": "ORDER_TYPE",
        "newValue": "N/B",
        "oldValue": ""
    }]
}
我正在使用spark sql根据唯一标识符的最大值查找每个键的最新记录。 columnList是一个数组,其中包含表的列列表。我想连接多个表并获取最新的记录。 如何将一个表的json数组中的列与另一个表中的列连接起来。有没有办法将json数组分解为多列。例如,上面的json将ORDER_NO作为一列,ORDER_TYPE作为另一列。如何基于columnName字段创建具有多列的数据框 例如:新RDD应该有列(表名、操作、时间戳、唯一标识符、订单号、订单号)
ORDER_NO和ORDER_NO字段的值应该从json中的newValue字段映射

通过使用RDDAPI以编程方式创建模式,找到了解决方案

  Dataset<Row> dataFrame = spark.read().json(inputPath);
    dataFrame.printSchema();
    JavaRDD<Row> rdd = dataFrame.toJavaRDD();
    SchemaBuilder schemaBuilder = new SchemaBuilder();
    // get the schema column names in appended format
    String columnNames = schemaBuilder.populateColumnSchema(rdd.first(), dataFrame.columns());
Dataset dataFrame=spark.read().json(inputPath);
dataFrame.printSchema();
JavaRDD rdd=dataFrame.toJavaRDD();
SchemaBuilder SchemaBuilder=新SchemaBuilder();
//获取附加格式的架构列名
String columnNames=schemaBuilder.populateColumnSchema(rdd.first(),dataFrame.columns());
SchemaBuilder是一个创建的自定义类,它接受rdd详细信息并返回分隔符分隔的列名。 然后使用RowFactory.create调用,将json值映射到模式。 文件参考