美文网首页
Spark(json类型转换为DataFrame进行sql查询分

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

作者: AlexYao | 来源:发表于2020-03-28 17:15 被阅读0次

    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();
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:Spark(json类型转换为DataFrame进行sql查询分

          本文链接:https://www.haomeiwen.com/subject/mpcsuhtx.html