Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Spark Java-将csv内的json转换为映射_Java_Apache Spark_Apache Spark Sql - Fatal编程技术网

Spark Java-将csv内的json转换为映射

Spark Java-将csv内的json转换为映射,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我有一个包含30列的CSV文件,其中一列是json字符串。 我想做的是读取csv并将json分解成行(分解) 例如: CSV: 结果如下: "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" "dat

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

例如: CSV:

结果如下:

"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;
    }
}
}
公共类MMM{
公共静态void main(字符串[]args){
字符串s=“data1,date1,{\“USERS-1\”:\“ff\”,\“name1\”:\“Joe1\”,\“age\”:\“1\”,1”;
生产线;
}
公共静态void processLine(字符串s){
最终字符串日期=s.split(“[{]”)0;
最后一个字符串内容=s.split(“[{]”)[1];
最终列表元素=Arrays.stream(content.split(“[,}]”).map(String::trim).filter(x->!x.isEmpty())
.collect(Collectors.toList());
字符串结果=日期;
对于(int i=0;i

基本上,代码所做的是将从CSV读取的一行拆分为两部分,即日期和括号之间的内容。再次拆分内容,修剪以删除“”在字符串的末尾找到,空字符串被过滤掉。我们现在有一个关于我们的元素列表。为了更好地显示方法的作用,我决定打印结果。您可以轻松修改代码,以便将它们返回到列表中或您喜欢的任何内容中。我希望我的答案是有帮助的,有一个nice day!

您在问题中尝试的附加代码可能重复。我已经回答了一个类似的问题:检查此问题:感谢您的回答,但该问题与Spark应用程序有关,而不是与Java问题有关。解决方案是创建一个实现函数接口的类。添加与b提供的相同的功能y调用()中我编写的方法方法,您必须覆盖该方法。拥有类后,您可以在对所使用的数据结构调用的映射函数中使用它。在数据结构上应用类/函数后,剩下的就是分解或平面映射数据,您将获得所需的输出。如果您使用的是JavaRDD:yourRDD.map(new YourFunction()).flatMap(x->x.iterator()。
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;
    }
}
}