java spark 读取json_Spark中基于Java处理JSON文件

该博客介绍了如何使用Java和Spark进行JSON文件的读取、解析、过滤和写入操作。示例代码展示了如何利用Jackson库解析JSON数据,找出喜欢熊猫的人,并将结果保存为新的JSON文件。
摘要由CSDN通过智能技术生成

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Iterator;

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import

org.apache.spark.api.java.function.FlatMapFunction;

import org.apache.spark.api.java.function.Function;

import com.fasterxml.jackson.databind.ObjectMapper;

public class BasicLoadJson {

public static class Person implements Serializable{

public String name;

public Boolean lovesPandas;

}

public static class ParseJson implements FlatMapFunction,

Person>{

@Override

public Iterable call(Iterator lines) throws Exception {

// TODO Auto-generated method stub

ArrayList people = new ArrayList();

ObjectMapper mapper = new ObjectMapper();

while(lines.hasNext()){

String line = lines.next();

try{

people.add(mapper.readValue(line, Person.class));

}catch(Exception e){

e.printStackTrace();

}

}

return people;

}

}

public static class LikesPandas implements Function{

@Override

public Boolean call(Person person) throws Exception {

// TODO Auto-generated method stub

return person.lovesPandas;

}

}

public static class WriteJson implements FlatMapFunction,

String>{

@Override

public Iterable call(Iterator people) throws Exception {

// TODO Auto-generated method stub

ArrayList text = new ArrayList();

ObjectMapper mapper = new ObjectMapper();

while(people.hasNext()){

Person person = people.next();

text.add(mapper.writeValueAsString(person));

}

return text;

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

SparkConf conf = new

SparkConf().setMaster("local[3]").setAppName("spark test2");

JavaSparkContext context = new JavaSparkContext(conf);

JavaRDD input = context.textFile("D:\\test.json");

JavaRDD result = input.mapPartitions(new

ParseJson()).filter(new LikesPandas());

for(Person person: result.collect()){

System.out.println(person.name);

}

JavaRDD formatted = result.mapPartitions(new

WriteJson());

formatted.saveAsTextFile("D:\\test_filter");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值