使用java将json格式的字符串转换为数据集spark

use*_*396 4 java json dictionary dataset apache-spark

非常新的火花...

假设我们有一个JSON格式的字符串,例如:

 String  entry1 = "{\"user_id\":1111,\"account_num\":12345}";
Run Code Online (Sandbox Code Playgroud)

如何将其读入Spark数据集?我了解数据集可以轻松地从路径读取json格式的数据,如下所示:

SparkSession sparksession = SparkSession.builder()...
Dataset<Row> dataset = sparksession.read().json('path')
Run Code Online (Sandbox Code Playgroud)

但是如何直接将上面的String转换为数据集?谢谢。

Sah*_*nda 5

更新:创建一个列表并将其传递给createDataset,这将为您提供DataSet,然后您可以通过spark.read转换为您的Dataset

List<String> jsonData = Arrays.asList(
        "{\"user_id\":1111,\"account_num\":12345}");
Dataset<String> anotherPeopleDataset = spark.createDataset(jsonData, Encoders.STRING());
Dataset<Row> anotherPeople = spark.read().json(anotherPeopleDataset);
Run Code Online (Sandbox Code Playgroud)

我查看了文档,但找不到从String读取的内容。某些功能未记录。但是,以下是一些解决方法

try {
    String  entry1 = "{\"user_id\":1111,\"account_num\":12345}";
    File file = File.createTempFile("temp",".txt");
    BufferedWriter bw = new BufferedWriter(new FileWriter(file));
    bw.write(entry1);
    bw.close();
    SparkSession sparksession = SparkSession.builder()...
    Dataset<Row> dataset = sparksession.read().json(file.getAbsolutePath())
    } catch (IOException e) {
       e.printStackTrace();
      }
Run Code Online (Sandbox Code Playgroud)