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

2020-03-28  本文已影响0人  AlexYao

1.达成目标

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

2.实现

2.1 数据示例

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

2.2 思路

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

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 <br>
 * date: 2020/3/28 4:10 下午 <br>
 * author: yaohao <br>
 * version: 1.0 <br>
 */
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<Row> 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<Row> result = rfDataset.sqlContext().sql("select age,name from person where age>=18");
        result.show();
    }
}


上一篇下一篇

猜你喜欢

热点阅读