Spark系列---SparkSQL(二)读取txt文件转为DataFrame表的所有action(Java、Scala版本)

该文章只附上代码案例,不进行讲解,需要了解的看以下文章

Spark系列---SparkSQL(一)介绍与使用

Spark系列---Spark算子RDD(Java、Scala版本)

读取txt文件转为DataFrame表的所有action

scala版本

package com.kevin.scala.dataframe

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SQLContext


/**
  *  读取txt文件转为DataFrame表的所有action操作
  */
object DataFrameActions {

  def main(args: Array[String]): Unit = {
    // 1.创建SparkConf
    val conf = new SparkConf().setAppName("DataFrameActions").setMaster("local")
    // 2.创建SparkContext
    val sc = new SparkContext(conf)
    // 3.创建SQLContext对象对sql进行分析处理
    val sqlContext = new SQLContext(sc)
    // 4.导入隐饰操作,否则RDD无法调用toDF方法
    import sqlContext.implicits._
    val file = "DTSparkSql\\src\\main\\resources\\person.txt"
    // 5.textFile读取文件数据,map用逗号切分数据,再map将数据类型转成Person。注:Person需要使用单列对象 case class,才能使用toDF转成DataFrame类型
    val df = sc.textFile(file).map(_.split(",")).map(p => Person(p(0), p(1), p(2).trim.toInt)).toDF()

    // 6.查看所有数据,默认前20行
    df.show()

    // 7.查看前n行数据
    df.show(2)

    // 8.是否最多只显示20个字符,默认为true
    df.show(true)
    df.show(false)

    // 9.显示前n行数据,以及对过长字符串显示格式
    df.show(2,false)

    // 10.打印schema
    df.printSchema()

    // 11.collect将数据转成数组,foreach遍历数据,getAs获取列名为name的数据
    df.collect().foreach(x => println("数据中的name: "+x.getAs("name")))

    // 12.collectAsList将数据转成集合
    println("collectAsList: "+df.collectAsList())

    // 13.describe获取指定字段的统计信息
    df.describe("name").show()

    // 14.first获取第一行记录
    println("获取第一行记录中的name: "+df.first().getAs("name"))

    // 15.head获取第一行记录,head(n)获取前n行记录,下标从1开始
    df.head(2).foreach(x => println("head中name: "+x.getAs("name")))

    // 16.take获取前n行数据,下标从1开始,使用take和takeAsList会将获得到的数据返回到Driver端,所以,使用这两个方法的时候需要少量数据
    df.take(2).foreach(x => println("take中name: "+x.getAs("name")))

    // 17.takeAsList获取前n行记录,以list形式展现
    println("takeAsList: " +df.takeAsList(2))

    // 18.关闭sc
    sc.stop()

  }

}

case class Person(id:String,name: String, age: Int)

Java版本

package com.kevin.java.dataframe;

import com.kevin.java.entity.Person;
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.Function;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;

import java.util.List;

/**
 * @author kevin
 * @version 1.0
 * @description     读取txt文件转为DataFrame表的所有action
 * @createDate 2019/1/6
 */
public class DataFrameActions {

    public static void main(String[] args) {

        // 1.创建SparkConf并设置作业名称和模式
        SparkConf conf = new SparkConf().setAppName("DataFrameActions").setMaster("local");

        // 2.基于sparkConf创建SparkContext
        JavaSparkContext sc = new JavaSparkContext(conf);

        // 3.创建SQLContext对象对sql进行分析处理
        SQLContext sqlContext = new SQLContext(sc);

        // 4.读取文件数据
        String file = "DTSparkSql\\src\\main\\resources\\person.txt";
        JavaRDD<String> lineRDD = sc.textFile(file);

        // 5.获取每一行txt数据转为person类型
        JavaRDD<Person> map = lineRDD.map(new Function<String, Person>() {
            @Override
            public Person call(String line) throws Exception {
                String[] s = line.split(",");
                Person p = new Person();
                p.setId(s[0]);
                p.setName(s[1]);
                p.setAge(Integer.valueOf(s[2]));
                return p;
            }
        });

        // 6.将person类型的数据转为DataFrame表
        DataFrame df = sqlContext.createDataFrame(map, Person.class);

        // 7.查看所有数据,默认前20行
        df.show();

        // 8.查看前n行数据
        df.show(2);

        // 9.是否最多只显示20个字符,默认为true
        df.show(true);
        df.show(false);

        // 10.显示前n行数据,以及对过长字符串显示格式
        df.show(2,false);

        // 11.打印schema
        df.printSchema();

        // 12.获取所有数据转到数据中
        Row[] collect = df.collect();
        for (Row r : collect) {
            Object name = r.getAs("name");
            System.out.println("数据中name: " + name);
        }

        // 13.获取所有数据转到集合中
        List<Row> rows = df.collectAsList();
        for (Row r : rows) {
            Object name = r.getAs("name");
            System.out.println("集合中name: " + name);
        }

        // 14.获取指定字段的统计信息
        df.describe("name").show();

        // 15.获取第一行记录
        Row first = df.first();
        Object firstName = first.getAs("name");
        System.out.println("获取第一行记录中的name: "+firstName);

        // 16.head()获取第一行记录,head(n)获取前n行记录,下标从1开始
        Row[] head = df.head(2);
        for (Row r : head) {
            Object name = r.getAs("name");
            System.out.println("head中name: " + name);
        }

        // 使用take和takeAsList会将获得到的数据返回到Driver端,所以,使用这两个方法的时候需要少量数据
        // 17.获取前n行数据,下标从1开始
        Row[] take = df.take(2);
        for (Row r : take) {
            Object name = r.getAs("name");
            System.out.println("take中name: " + name);
        }

        // 18.获取前n行记录,以list形式展现
        List<Row> takeAsList = df.takeAsList(2);
        for(Row takes : takeAsList) {
            Object name = takes.getAs("name");
            System.out.println("takeAsList中name: " + name);
        }

        // 19.关闭
        sc.close();

    }
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark 3.0版本中的Spark SQL是一个用于处理结构化数据的模块,它提供了一种基于SQL的接口,可以方便地进行数据查询、过滤、聚合、连接等操作。Spark SQL还支持将结构化数据与非结构化数据(如JSON、Parquet、Avro等)进行无缝集成,同时还提供了一些高级功能,如分区、分桶、窗口函数等。Spark 3.0版本中的Spark SQL还引入了一些新特性,如动态分区、动态分桶、动态过滤等,可以进一步提高数据处理的效率和灵活性。 ### 回答2: Spark 3.0版本中的SparkSQL是一个用于处理结构化数据的分布式查询引擎。它提供了一种基于SQL语言的API,使得开发人员可以使用SQL语句对数据进行查询、换和分析。 SparkSQL具有以下几个主要特点: 1. 高性能:SparkSQL利用了Spark的弹性分布式计算模型,能够立即处理大规模数据。它通过将查询计划换为可以在分布式集群上执行的任务来实现高效的查询。 2. 兼容性:SparkSQL兼容Hive,可以直接读取和查询Hive。它还支持多种文件格式,包括Parquet、ORC、Avro等。 3. 多语言支持:SparkSQL支持多种编程语言,包括ScalaJava、Python和R。这使得开发人员可以使用他们熟悉的语言进行数据查询和分析。 4. 数据源集成:SparkSQL提供了丰富的数据源接口,可以轻松地从各种数据源中读取和写入数据,包括关系型数据库、Hive、HDFS、S3等。 5. 支持流数据处理:SparkSQL不仅可以处理静态的批处理数据,还可以处理实时的流式数据。它提供了结构化流处理(Structured Streaming)功能,可以将流数据视为连续的,并对其进行查询和换。 总之,SparkSQLSpark 3.0版本中的一个重要组件,它提供了一种灵活、高效的方式来处理和分析结构化数据。无论是处理批量数据还是实时流数据,SparkSQL都能在分布式集群上提供高性能的查询和分析能力。 ### 回答3: Spark 3.0版本Spark SQLSpark生态系统中的一个重要组件。它提供了用于在Spark上进行结构化数据处理的高级接口。 Spark SQL支持多种数据源,包括Hive、Avro、Parquet、ORC、JSON等,可以方便地读取和写入这些格式的数据。通过Spark SQL,用户可以使用SQL语句来查询、分析和处理数据,同时还能够使用DataFrame和Dataset API进行更灵活和更高级的数据操作。 Spark SQL还提供了一个优化器,能够对SQL查询进行优化,包括谓词下推、投影下推、列剪裁等,以提高查询的性能。此外,Spark SQL还提供了支持多种文件格式的自动schema推断功能,使得用户可以在没有定义结构的情况下直接读取文件。 在Spark 3.0中,Spark SQL引入了更多的功能和优化。其中包括支持数组和Map类型的数据操作、支持规范化和反规范化数据、支持视图和临时、支持动态分区写入等。此外,Spark 3.0还引入了Catalyst优化器的新版本,进一步提升了查询性能。 总之,Spark 3.0版本Spark SQL为用户提供了一个强大而灵活的数据处理工具,在处理大规模结构化数据时具有高性能和易用性的优势。无论是在数据分析、数据仓库建设还是在机器学习和深度学习等领域,Spark SQL都是一款非常有价值的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值