如何在ApacheSpark中将json对象映射到java对象
我有下面的json对象,我想把这个json映射成java对象,请帮助我如何在ApacheSpark中将json对象映射到java对象,java,json,apache-spark,Java,Json,Apache Spark,我有下面的json对象,我想把这个json映射成java对象,请帮助我 { "address": { "building": "1007", "coord": [ -73.856077, 40.848447 ], "street": "Morris Park Ave", "zipcode": "10462" }, "borough": "Bronx", "cuisine": "Bakery", "grades":
{
"address": {
"building": "1007",
"coord": [
-73.856077,
40.848447
],
"street": "Morris Park Ave",
"zipcode": "10462"
},
"borough": "Bronx",
"cuisine": "Bakery",
"grades": [
{
"date": {
"$date": 1393804800000
},
"grade": "A",
"score": 2
},
{
"date": {
"$date": 1378857600000
},
"grade": "A",
"score": 6
},
{
"date": {
"$date": 1358985600000
},
"grade": "A",
"score": 10
},
{
"date": {
"$date": 1322006400000
},
"grade": "A",
"score": 9
},
{
"date": {
"$date": 1299715200000
},
"grade": "B",
"score": 14
}
],
"name": "Morris Park Bake Shop",
"restaurant_id": "30075445"
}
当我使用scala printschema方法时,如下图所示,请帮助我将该模式映射到java对象
root
|-- address: struct (nullable = true)
| |-- building: string (nullable = true)
| |-- coord: array (nullable = true)
| | |-- element: double (containsNull = true)
| |-- street: string (nullable = true)
| |-- zipcode: string (nullable = true)
|-- borough: string (nullable = true)
|-- cuisine: string (nullable = true)
|-- grades: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- date: struct (nullable = true)
| | | |-- $date: long (nullable = true)
| | |-- grade: string (nullable = true)
| | |-- score: long (nullable = true)
|-- name: string (nullable = true)
|-- restaurant_id: string (nullable = true)
如果您想将json字符串转换为java 你可以使用Gson
Gson g = new Gson(); yourvenillabean p = g.fromJson(jsonString, yourvanillabean.class)
请参见此处的完整示例
阅读更多
既然您添加了spark标记,如果我是对的,那么下面就是spark处理json的方法,如果您想创建一个数据帧 您可以将此json转换为数据帧,如下所示
package examples;
import org.apache.spark.SparkConf;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;
import java.util.Arrays;
import java.util.List;
public class JsonDF {
SparkSession sparkSession;
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.setMaster("local[2]");
SparkSession spark = SparkSession
.builder()
.appName("Dataset-json")
.master("local[4]")
.getOrCreate();
System.out.println("Session created");
String str = "{\n" +
" \"address\": {\n" +
" \"building\": \"1007\",\n" +
" \"coord\": [\n" +
" -73.856077,\n" +
" 40.848447\n" +
" ],\n" +
" \"street\": \"Morris Park Ave\",\n" +
" \"zipcode\": \"10462\"\n" +
" },\n" +
" \"borough\": \"Bronx\",\n" +
" \"cuisine\": \"Bakery\",\n" +
" \"grades\": [\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1393804800000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 2\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1378857600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 6\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1358985600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 10\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1322006400000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 9\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1299715200000\n" +
" },\n" +
" \"grade\": \"B\",\n" +
" \"score\": 14\n" +
" }\n" +
" ],\n" +
" \"name\": \"Morris Park Bake Shop\",\n" +
" \"restaurant_id\": \"30075445\"\n" +
"}";
List<String> data = Arrays.asList(str);
Dataset<String> ds = spark.createDataset(data, Encoders.STRING());
spark.read().json(ds).show(false);
}
}
更新:
因为您想将json转换为java类,所以可以使用json字符串来实现这一点
转换后,您可以得到如下类:
public class Application {
Address AddressObject;
private String borough;
private String cuisine;
ArrayList<Object> grades = new ArrayList<Object>();
private String name;
private String restaurant_id;
// Getter Methods
public Address getAddress() {
return AddressObject;
}
public String getBorough() {
return borough;
}
public String getCuisine() {
return cuisine;
}
public String getName() {
return name;
}
public String getRestaurant_id() {
return restaurant_id;
}
// Setter Methods
public void setAddress( Address addressObject ) {
this.AddressObject = addressObject;
}
public void setBorough( String borough ) {
this.borough = borough;
}
public void setCuisine( String cuisine ) {
this.cuisine = cuisine;
}
public void setName( String name ) {
this.name = name;
}
public void setRestaurant_id( String restaurant_id ) {
this.restaurant_id = restaurant_id;
}
}
public class Address {
private String building;
ArrayList<Object> coord = new ArrayList<Object>();
private String street;
private String zipcode;
// Getter Methods
public String getBuilding() {
return building;
}
public String getStreet() {
return street;
}
public String getZipcode() {
return zipcode;
}
// Setter Methods
public void setBuilding( String building ) {
this.building = building;
}
public void setStreet( String street ) {
this.street = street;
}
public void setZipcode( String zipcode ) {
this.zipcode = zipcode;
}
}
下面是一个将json字符串转换为java的示例 你可以使用Gson
Gson g = new Gson(); yourvenillabean p = g.fromJson(jsonString, yourvanillabean.class)
请参见此处的完整示例
阅读更多
既然您添加了spark标记,如果我是对的,那么下面就是spark处理json的方法,如果您想创建一个数据帧 您可以将此json转换为数据帧,如下所示
package examples;
import org.apache.spark.SparkConf;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;
import java.util.Arrays;
import java.util.List;
public class JsonDF {
SparkSession sparkSession;
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.setMaster("local[2]");
SparkSession spark = SparkSession
.builder()
.appName("Dataset-json")
.master("local[4]")
.getOrCreate();
System.out.println("Session created");
String str = "{\n" +
" \"address\": {\n" +
" \"building\": \"1007\",\n" +
" \"coord\": [\n" +
" -73.856077,\n" +
" 40.848447\n" +
" ],\n" +
" \"street\": \"Morris Park Ave\",\n" +
" \"zipcode\": \"10462\"\n" +
" },\n" +
" \"borough\": \"Bronx\",\n" +
" \"cuisine\": \"Bakery\",\n" +
" \"grades\": [\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1393804800000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 2\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1378857600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 6\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1358985600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 10\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1322006400000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 9\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1299715200000\n" +
" },\n" +
" \"grade\": \"B\",\n" +
" \"score\": 14\n" +
" }\n" +
" ],\n" +
" \"name\": \"Morris Park Bake Shop\",\n" +
" \"restaurant_id\": \"30075445\"\n" +
"}";
List<String> data = Arrays.asList(str);
Dataset<String> ds = spark.createDataset(data, Encoders.STRING());
spark.read().json(ds).show(false);
}
}
更新:
因为您想将json转换为java类,所以可以使用json字符串来实现这一点
转换后,您可以得到如下类:
public class Application {
Address AddressObject;
private String borough;
private String cuisine;
ArrayList<Object> grades = new ArrayList<Object>();
private String name;
private String restaurant_id;
// Getter Methods
public Address getAddress() {
return AddressObject;
}
public String getBorough() {
return borough;
}
public String getCuisine() {
return cuisine;
}
public String getName() {
return name;
}
public String getRestaurant_id() {
return restaurant_id;
}
// Setter Methods
public void setAddress( Address addressObject ) {
this.AddressObject = addressObject;
}
public void setBorough( String borough ) {
this.borough = borough;
}
public void setCuisine( String cuisine ) {
this.cuisine = cuisine;
}
public void setName( String name ) {
this.name = name;
}
public void setRestaurant_id( String restaurant_id ) {
this.restaurant_id = restaurant_id;
}
}
public class Address {
private String building;
ArrayList<Object> coord = new ArrayList<Object>();
private String street;
private String zipcode;
// Getter Methods
public String getBuilding() {
return building;
}
public String getStreet() {
return street;
}
public String getZipcode() {
return zipcode;
}
// Setter Methods
public void setBuilding( String building ) {
this.building = building;
}
public void setStreet( String street ) {
this.street = street;
}
public void setZipcode( String zipcode ) {
this.zipcode = zipcode;
}
}
下面是一个示例,我想它的目的是从json字符串创建Java对象。这将是一个很长的示例,但很容易实现。 此解决方案基于Jackson API。ObjectMapper是用于数据绑定的主要API 步骤1: 如果您使用的是pom.xml,请在maven依赖项中包含jackson,否则请从maven存储库下载相应的jar文件 我将为POJO的自下而上添加代码 日期:
package org.personal.TestProject.jsontoobject;
public class Date {
private float $date;
// Getter Methods
public float get$date() {
return $date;
}
// Setter Methods
public void set$date(float $date) {
this.$date = $date;
}
}
等级:
package org.personal.TestProject.jsontoobject;
public class Grade {
Date date = new Date();
private String grade;
private float score;
// Getter Methods
public float getScore() {
return score;
}
public String getGrade() {
return grade;
}
public Date getDate() {
return date;
}
// Setter Methods
public void setScore(float score) {
this.score = score;
}
public void setGrade(String grade) {
this.grade = grade;
}
public void setDate(Date date) {
this.date = date;
}
}
等级:
package org.personal.TestProject.jsontoobject;
import java.util.ArrayList;
import java.util.List;
import org.personal.TestProject.jsontoobject.Grade;
public class Grades {
private List<Grade> grades = new ArrayList<Grade>();
public List<Grade> getGrades() {
return grades;
}
public void setGrades(List<Grade> grades) {
this.grades = grades;
}
}
我想目的是从json字符串创建Java对象。这将是一个很长的过程,但很容易实现。 此解决方案基于Jackson API。ObjectMapper是用于数据绑定的主要API 步骤1: 如果您使用的是pom.xml,请在maven依赖项中包含jackson,否则请从maven存储库下载相应的jar文件 我将为POJO的自下而上添加代码 日期:
package org.personal.TestProject.jsontoobject;
public class Date {
private float $date;
// Getter Methods
public float get$date() {
return $date;
}
// Setter Methods
public void set$date(float $date) {
this.$date = $date;
}
}
等级:
package org.personal.TestProject.jsontoobject;
public class Grade {
Date date = new Date();
private String grade;
private float score;
// Getter Methods
public float getScore() {
return score;
}
public String getGrade() {
return grade;
}
public Date getDate() {
return date;
}
// Setter Methods
public void setScore(float score) {
this.score = score;
}
public void setGrade(String grade) {
this.grade = grade;
}
public void setDate(Date date) {
this.date = date;
}
}
等级:
package org.personal.TestProject.jsontoobject;
import java.util.ArrayList;
import java.util.List;
import org.personal.TestProject.jsontoobject.Grade;
public class Grades {
private List<Grade> grades = new ArrayList<Grade>();
public List<Grade> getGrades() {
return grades;
}
public void setGrades(List<Grade> grades) {
this.grades = grades;
}
}
您好,您想将此json转换为java中的数据帧吗?不要在问题中发布图像您可以复制粘贴如上所述的架构。您好,您想将此json转换为java中的数据帧吗?不要在问题中发布图像您可以复制粘贴如上所述的架构。谢谢您的回复:)。我需要创建一个名为Restaurant的类,并加载记录作为该类的实例。如何创建这个restreent类。请帮助您可以使用copy json string并在线转换为java对象如果是的话是否有用请感谢您宝贵的时间,我在这个映射部分仍然存在问题我在转换json后创建了一个名为restrent的类。在spark端,将我的模式与json映射到哪里。。?请帮助我您是否可以使用Jackson API查看下面的解决方案并发表评论。谢谢您的回复:)。我需要创建一个名为Restaurant的类,并加载记录作为该类的实例。如何创建这个restreent类。请帮助您可以使用copy json string并在线转换为java对象如果是的话是否有用请感谢您宝贵的时间,我在这个映射部分仍然存在问题我在转换json后创建了一个名为restrent的类。在spark端,将我的模式与json映射到哪里。。?请帮我看看下面使用Jackson API的解决方案,并发表评论。请对答案进行评分/投票。这将帮助有需要的开发者。请对答案进行打分/投票。这将帮助有需要的开发者。
package org.personal.TestProject.jsontoobject;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.personal.TestProject.jsontoobject.AddressDetails;
public class ReadJsonFile {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
String json = "{\n" +
" \"address\": {\n" +
" \"building\": \"1007\",\n" +
" \"coord\": [\n" +
" -73.856077,\n" +
" 40.848447\n" +
" ],\n" +
" \"street\": \"Morris Park Ave\",\n" +
" \"zipcode\": \"10462\"\n" +
" },\n" +
" \"borough\": \"Bronx\",\n" +
" \"cuisine\": \"Bakery\",\n" +
" \"grades\": [\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1393804800000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 2\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1378857600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 6\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1358985600000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 10\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1322006400000\n" +
" },\n" +
" \"grade\": \"A\",\n" +
" \"score\": 9\n" +
" },\n" +
" {\n" +
" \"date\": {\n" +
" \"$date\": 1299715200000\n" +
" },\n" +
" \"grade\": \"B\",\n" +
" \"score\": 14\n" +
" }\n" +
" ],\n" +
" \"name\": \"Morris Park Bake Shop\",\n" +
" \"restaurant_id\": \"30075445\"\n" +
"}";
AddressDetails value = null;
try {
value = mapper.readValue(json, AddressDetails.class);
// For converting a json file to object use below code
//value = mapper.readValue(new File("result.json"), AddressDetails.class);
// Use getter methods to Access any fields on the object
System.out.println("Restaurant ID " +value.getRestaurant_id());
} catch (Exception e) {
e.printStackTrace();
}
}
}