java - Spark Java - 将 csv 内的 json 转换为 map

标签 java apache-spark apache-spark-sql

我有大约 30 列的 CSV 文件,其中一列是 json 字符串。 我想做的是读取 csv 并将 json 分解为行(分解)。

例如: CSV:

"data1,date1,{"USERS-1":"ff", "name1":"Joe1", "age":"1"},1" 
"data2,date2,{"USERS-2":"ff", "name2":"Joe2", "age":"2"},2" 
"data3,date3,{"USERS-3":"ff", "name3":"Joe3", "age":"3"},3" 

之后的结果:

"data1,date1,"USERS-1","ff",1"
"data1,date1,"name1","Joe1",1"
"data1,date1,"age","1",1"
"data2,date2,"USERS-2","ff",2"
"data2,date2,"name2","Joe1",2"
"data2,date2,"age","2",2"
"data3,date3,"USERS-3","ff",3"
"data3,date3,"name3","Joe1",3"
"data3,date3,"age","3",3"

我不是用scala编写的。

Json 是非结构化的!

最佳答案

乔!我写了一个类,目的是向您展示我将如何解决您的问题。在代码之后,我将向您提供额外的详细信息,以便您更好地理解代码的作用。

public class MMM {

public static void main(String[] args) {
    String s = "data1,date1,{\"USERS-1\":\"ff\", \"name1\":\"Joe1\", \"age\":\"1\"},1";
    processLine(s);
}

public static void processLine(String s) {
    final String dates = s.split("[{]")[0];
    final String content = s.split("[{]")[1];
    final List<String> elements = Arrays.stream(content.split("[,}]")).map(String::trim).filter(x -> !x.isEmpty())
            .collect(Collectors.toList());
    String result = dates;
    for (int i = 0; i < elements.size() - 1; i++) {
        result += elements.get(i);
        result += elements.get(elements.size() - 1);
        System.out.println(result);
        result = dates;
    }
}
}

基本上,代码的作用是将从 CSV 读取的一行分成两部分:日期和括号之间的内容。内容被再次分割、修剪,以删除字符串末尾的“”,并过滤掉空字符串。现在我们有了一份与我们相关的要素列表。为了更好地可视化该方法的作用,我决定打印结果。您可以轻松修改代码,以便将它们返回到列表或您可能喜欢的任何内容中。希望我的回答对您有所帮助,祝您有美好的一天!

关于java - Spark Java - 将 csv 内的 json 转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53525519/

相关文章:

java - 如何使用 Spring Boot 向 iOS 应用程序发送推送通知

java - JPQL——空值到 boolean 值?

Java:在数组中使用 "08"和 "09"

scala - Spark- “sbt package”- “value $ is not a member of StringContext”-缺少Scala插件吗?

java - 有没有办法在编译时为Java定义一个常量值

hbase - Spark序列化错误

azure - pyspark 读取 csv 文件有限制吗?

scala - 为什么 dataset.count() 比 rdd.count() 快?

apache-spark - Spark 节省大量时间

apache-spark - 如何实际应用保存的 RF 模型并在 Spark2 中进行预测?