美文网首页
自动分区推断

自动分区推断

作者: 一个人一匹马 | 来源:发表于2019-02-22 09:30 被阅读0次

表分区是一种常见的优化方式,比如Hive中就提供了表分区的特性。在一个分区表中,不同分区的数据通常存储在不同的目录中,分区列的值通常就包含在了分区目录的目录名中。Spark SQL中的Parquet数据源,支持自动根据目录名推断出分区信息。例如,如果将人口数据存储在分区表中,并且使用性别和国家作为分区列。那么目录结构可能如下所示:
tableName
|- gender=male
|- country=US
...
...
...
|- country=CN
...
|- gender=female
|- country=US
...
|- country=CH
...
如果将/tableName传入SQLContext.read.parquet()或者SQLContext.read.load()方法,那么Spark SQL就会自动根据目录结构,推断出分区信息,是gender和country。即使数据文件中只包含了两列值,name和age,但是Spark SQL返回的DataFrame,调用printSchema()方法时,会打印出四个列的值:name,age,country,gender。这就是自动分区推断的功能。
此外,分区列的数据类型,也是自动被推断出来的。目前,Spark SQL仅支持自动推断出数字类型和字符串类型。有时,用户也许不希望Spark SQL自动推断分区列的数据类型。此时只要设置一个配置即可, spark.sql.sources.partitionColumnTypeInference.enabled,默认为true,即自动推断分区列的类型,设置为false,即不会自动推断类型。禁止自动推断分区列的类型时,所有分区列的类型,就统一默认都是String。
案例:自动推断用户数据的性别和国家

Hadoop fs –mkdir /users
Hadoop fs –mkdir /users/gender=male
Hadoop fs –mkdir /users/gender=male/country=us
Hadoop fs –put users.parguet /users/gender=male/country=us/users.parguet

/**
 * Parquet数据源之自动推断分区
 * @author Administrator
 *
 */

public class ParquetPartitionDiscovery {

​public static void main(String[] args) {
​​// TODO Auto-generated method stub
​​SparkConf conf = new SparkConf()​​​.setAppName("ParquetPartitionDiscovery");
​​JavaSparkContext sc = new JavaSparkContext(conf);
​​SQLContext sqlContext = new SQLContext(sc);

​​DataFrame usersDF = sqlContext​​​​.read().parquet(​​​​​​"hdfs://spark1:9000/susers/gender=male/country=US/users.parquet");
usersDF.printSchema();
​​usersDF.show();

​}
}

相关文章

  • 自动分区推断

    表分区是一种常见的优化方式,比如Hive中就提供了表分区的特性。在一个分区表中,不同分区的数据通常存储在不同的目录...

  • kotlin 变量常量 2018-06-12

    类型自动推断 声明变量并赋值后,kotlin会自动推断变量的数据类型。

  • TypeScript 之 类型推断 类型兼容 类型保护

    类型推断 ts会自动推断写的代码是什么类型 当你不需要ts自动推断类型的时候 需要用到类型断言 最佳通过类型推断 ...

  • 在swift 4.0中用系统方法setValuesForKeys

    原因在swift3中,编译器自动推断@objc,换句话说,它自动添加@objc在swift4中,编译器不再自动推断...

  • C/C++中如何获取数组和指针的长度

    获取数组长度 算术表达式 函数模板参数自动推断 标准C++模板库 模板特化与自动类型推断 Visual C++编译...

  • Swift中的几个高阶函数

    sort 有一个数组 // 编译器可以自动推断出返回类型,所以可以省略 // 编译器可以自动推断出参数类型 // ...

  • Kotlin Contract

    Kotlin 的智能推断是其语言的一大特色。 智能推断,能够根据类型检测自动转换类型。 但是,智能推断并没有想象中...

  • Day-19 磁盘管理(下)

    1.开机自动挂载 修改/etc/fstab配置文件来实现开机自动挂载 2.关于交换分区 交换分区是用来应急的,当系...

  • 【转载】hive使用技巧

    自动化动态分配表分区及修改hive表字段名称 1、自动化动态分配表分区 set hive.exec.dynamic...

  • Swift 新特性记录

    Swift4 1、setValuesForKeys 无法使用问题在swift3中,编译器自动推断@objc(自动添...

网友评论

      本文标题:自动分区推断

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