Spark(json类型转换为DataFrame进行sql查询分析)

1.达成目标

读取采用逗号分隔的txt文件数据,通过sql对于txt文件中的数据进行查询

2.实现

2.1 数据示例

{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}

2.2 思路

读取文件,形成javaRDD对象,对于每行数据进行分隔,形成以Row封装的JavaRDD对象,定义数据的格式后,结合Row对象,生成新的Dataset,调用sqlContext的sql方法,对于Dataset进行查询,得到结果

2.3 实现

代码:

package com.surfilter.spark.java;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

/**
 * description: RDD2DataFrameByJson 
* date: 2020/3/28 4:10 下午
* author: yaohao
* version: 1.0
*/ public class RDD2DataFrameByJson { public static void main(String args[]) { //创建一个sparksession SparkSession spark = SparkSession .builder() .appName("RDD2DataFrameProgrammatically") .master("local") .getOrCreate(); //读取文件,创建一个javaRDD,读取文件的textFile获取的是RDD方法,需要使用toJavaRDD,转换为javaRDD对象 //这里的数据结构为 {"name":"Justin", "age":19} 每行一条数据 Dataset rfDataset = spark.read().json("/Users/yaohao/tools/spark-2.4.5-bin-hadoop2.7/examples/src/main/resources/people.json"); //可以理解为注册城一张表,支持后面采用sql方式进行查询 rfDataset.registerTempTable("person"); //执行查询语句 Dataset result = rfDataset.sqlContext().sql("select age,name from person where age>=18"); result.show(); } }

你可能感兴趣的:(Spark(json类型转换为DataFrame进行sql查询分析))