2016-11-22 3 views
5

解析JSONのデータセット列を

+--------------------+ 
|    value| 
+--------------------+ 
|{"Context":"00AA0...| 
+--------------------+ 

JSONサンプル:

{"Context":"00AA00AA","MessageType":"1010","Module":"1200"} 

どのように私は最も効率的にこのようになりますDataset<Row>を得ることができます

+--------+-----------+------+ 
| Context|MessageType|Module| 
+--------+-----------+------+ 
|00AA00AA|  1010| 1200| 
+--------+-----------+------+ 

私はこれらのデータをstreで処理しています

spark 
.readStream() 
.schema(MyPojo.getSchema()) 
.json("src/myinput") 

しかし、今私はカフカからデータを読んでいると、それは私に別の形式でデータを提供します:午前、私は、ファイルからそれを読んでいる時に火花が彼によって自己を、これを行うことができることを知っています。 私はGsonのようなパーザーを使うことができることを知っていますが、私はそれをするために火花をつけたいと思います。

答えて

1

このサンプルを試してみてください。

public class SparkJSONValueDataset { 
    public static void main(String[] args) { 
     SparkSession spark = SparkSession 
       .builder() 
       .appName("SparkJSONValueDataset") 
       .config("spark.sql.warehouse.dir", "/file:C:/temp") 
       .master("local") 
       .getOrCreate(); 

     //Prepare data Dataset<Row> 
     List<String> data = Arrays.asList("{\"Context\":\"00AA00AA\",\"MessageType\":\"1010\",\"Module\":\"1200\"}"); 
     Dataset<Row> df = spark.createDataset(data, Encoders.STRING()).toDF().withColumnRenamed("_1", "value"); 
     df.show(); 

     //convert to Dataset<String> and Read 
     Dataset<String> df1 = df.as(Encoders.STRING()); 
     Dataset<Row> df2 = spark.read().json(df1.javaRDD()); 
     df2.show(); 
     spark.stop(); 
    } 
} 
+0

あなたの答えはtyです。これはうまくいくと思うが、私は本当に読者に私のDFを送るというアイデアは好きではない: –