首先看看从官网学习后总结的一个思维导图

概述(Overview)

Spark SQL是Spark的一个模块,用于结构化数据处理。它提供了一个编程的抽象被称为DataFrames,也可以作为分布式SQL查询引擎。

开始Spark SQL

Spark SQL中所有功能的入口点是SQLContext类,或者它子类中的一个。为了创建一个基本的SQLContext,你所需要的是一个SparkContext。

除了基本的SQLContext,你还可以创建一个HiveContext,它提供了基本的SQLContext的所提供的功能的超集。这些功能中包括附加的特性,可以编写查询,使用更完全的HiveQL解析器,访问Hive UDFs,能够从Hive表中读取数据。现在暂不研究,以后学习

  1. <span style="white-space:pre">        </span>SparkConf conf = new SparkConf();
  2. conf.set("spark.testing.memory", "2147480000"); // 因为jvm无法获得足够的资源
  3. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App", conf);
  4. System.out.println(sc);
  5. // sc is an existing JavaSparkContext.
  6. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);

DataFrames

DataFrame是一种以命名列方式组织的分布式数据集。它概念上相当于关系型数据库中的表,或者R/Python中的数据帧,但是具有更丰富的优化。有很多方式可以构造出一个DataFrame,例如:结构化数据文件,Hive中的tables,外部数据库或者存在的RDDs.
DataFrame的API适用于Scala、Java和Python.
该页上所有的例子使用Spark分布式中的样本数据,可以运行在spark-shell或者pyspark shell中。

创建DataFrames(Creating DataFrames)

使用SQLContext,应用可以从一个已经存在的RDD、Hive表或者数据源中创建DataFrames。

例如,以下根据一个JSON文件创建出一个DataFrame:

  1. package com.tg.spark.sql;
  2. import org.apache.spark.SparkConf;
  3. import org.apache.spark.api.java.JavaSparkContext;
  4. import org.apache.spark.sql.DataFrame;
  5. import org.apache.spark.sql.SQLContext;
  6. /**
  7. * 根据一个JSON文件创建出一个DataFrame:
  8. * @author 汤高
  9. *
  10. */
  11. public class DataFrameOps {
  12. public static void main(String[] args) {
  13. SparkConf conf=new SparkConf();
  14. conf.set("spark.testing.memory", "2147480000");     //因为jvm无法获得足够的资源
  15. //JavaSparkContext sc = new JavaSparkContext("spark://192.168.52.140:7077", "First Spark App",conf);
  16. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App",conf);
  17. SQLContext sqlContext = new SQLContext(sc);
  18. DataFrame df = sqlContext.read().json("hdfs://master:9000/testFile/people.json");
  19. // Displays the content of the DataFrame to stdout
  20. df.show();
  21. // age  name
  22. // null Michael
  23. // 30   Andy
  24. // 19   Justin
  25. // Print the schema in a tree format
  26. df.printSchema();
  27. // root
  28. // |-- age: long (nullable = true)
  29. // |-- name: string (nullable = true)
  30. // Select only the "name" column
  31. df.select("name").show();
  32. // name
  33. // Michael
  34. // Andy
  35. // Justin
  36. // Select everybody, but increment the age by 1
  37. df.select(df.col("name"), df.col("age").plus(1)).show();
  38. // name    (age + 1)
  39. // Michael null
  40. // Andy    31
  41. // Justin  20
  42. // Select people older than 21
  43. df.filter(df.col("age").gt(21)).show();
  44. // age name
  45. // 30  Andy
  46. // Count people by age
  47. df.groupBy("age").count().show();
  48. // age  count
  49. // null 1
  50. // 19   1
  51. // 30   1
  52. }
  53. }

SQLContext中的sql函数使应用可以以编程方式运行SQL查询,并且将结果以DataFrame形式返回。具体案例见后面

Spark SQL支持两种不同的方法,用于将存在的RDDs转换成DataFrames。第一种方法使用反射来推断包含特定类型的对象的RDD的模式。在写Spark应用时,当你已知schema的情况下,这种基于反射的方式使得代码更加简介,并且效果更好。

创建DataFrames的第二种方法是通过编程接口,它允许你构建一个模式,然后将其应用到现有的RDD上。这种方式更加的繁琐,它允许你构建一个DataFrame当列以及类型未知,直到运行时才能知道时。

使用反射推断模式(Inferring the Schema Using Reflection)

知道RDD格式的前提下

JavaBeans类定义了表的模式,JavaBeans类的参数的名称使用反射来读取,然后称为列的名称。
JavaBeans类还可以嵌套或者包含复杂的类型,例如Sequences或者Arrays。
这个RDD可以隐式地转换为DataFrame,然后注册成表,
表可以在后续SQL语句中使用Spark SQL中的Scala接口支持自动地将包含JavaBeans类的RDD转换成DataFrame。

步骤:

1、使用JavaBeans类定义schema
2、创建一个SQLContext
3、通过调用createDataFrame方法模式应用到所有现有的RDD,并为JavaBean提供class对象  达到将RDD转换成DataFrame
4、创建一个DataFrame,并将它注册成表。
5、使用sqlContext提供的sql方法,就可以使用SQL语句来查询了。查询后返回的结果是DataFrame,它支持所有的RDD操作

首先写一个JavaBean类,实现序列化接口,并提供get和set方法

  1. package com.tg.spark.sql;
  2. import scala.Serializable;
  3. public class Person implements Serializable {
  4. /**
  5. *
  6. */
  7. private static final long serialVersionUID = 727694963564948838L;
  8. private String name;
  9. private int age;
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public int getAge() {
  17. return age;
  18. }
  19. public void setAge(int age) {
  20. this.age = age;
  21. }
  22. }
  1. package com.tg.spark.sql;
  2. import org.apache.spark.api.java.JavaRDD;
  3. import org.apache.spark.api.java.JavaSparkContext;
  4. import org.apache.spark.api.java.function.Function;
  5. import org.apache.spark.sql.DataFrame;
  6. import org.apache.spark.sql.Row;
  7. import org.apache.spark.sql.SQLContext;
  8. import org.apache.spark.storage.StorageLevel;
  9. import java.util.List;
  10. import org.apache.spark.SparkConf;
  11. public class CreateDataFrame1 {
  12. public static void main(String[] args) {
  13. SparkConf conf=new SparkConf();
  14. conf.set("spark.testing.memory", "2147480000");     //因为jvm无法获得足够的资源
  15. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App",conf);
  16. System.out.println(sc);
  17. // sc is an existing JavaSparkContext.
  18. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
  19. // Load a text file and convert each line to a JavaBean.
  20. JavaRDD<Person> people = sc.textFile("hdfs://master:9000/testFile/people.txt").map(
  21. new Function<String, Person>() {
  22. public Person call(String line) throws Exception {
  23. String[] parts = line.split(",");
  24. Person person = new Person();
  25. person.setName(parts[0]);
  26. person.setAge(Integer.parseInt(parts[1].trim()));
  27. return person;
  28. }
  29. });
  30. //A schema can be applied to an existing RDD by calling createDataFrame and providing the Class object for the JavaBean.
  31. // Apply a schema to an RDD of JavaBeans and register it as a table.
  32. DataFrame schemaPeople = sqlContext.createDataFrame(people, Person.class);
  33. schemaPeople.registerTempTable("people");
  34. // SQL can be run over RDDs that have been registered as tables.
  35. DataFrame teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19");
  36. // The results of SQL queries are DataFrames and support all the normal RDD operations.
  37. // The columns of a row in the result can be accessed by ordinal.
  38. List<String> teenagerNames = teenagers.javaRDD().map(new Function<Row, String>() {
  39. public String call(Row row) {
  40. return "Name: " + row.getString(0);
  41. }
  42. }).collect();
  43. teenagers.persist(StorageLevel.MEMORY_ONLY());
  44. System.out.println(teenagerNames);
  45. }
  46. }

上面的这段代码

  1. DataFrame teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19");

SQLContext中的sql函数使应用可以以编程方式运行SQL查询,并且将结果以DataFrame形式返回

以编程方式指定模式(Programmatically Specifying the Schema)

不知道RDD的列和它的类型时

步骤:

1.从原有的RDD中创建包含行的RDD。
2.创建一个由StructType表示的模式,StructType符合由步骤1创建的RDD的行的结构。
3.通过SQLContext提供的createDataFrame方法,将模式应用于包含行的RDD。

  1. package com.tg.spark.sql;
  2. import org.apache.spark.api.java.JavaRDD;
  3. import org.apache.spark.api.java.JavaSparkContext;
  4. import org.apache.spark.api.java.function.Function;
  5. import org.apache.spark.sql.DataFrame;
  6. import org.apache.spark.sql.Row;
  7. import org.apache.spark.sql.RowFactory;
  8. import org.apache.spark.sql.SQLContext;
  9. import org.apache.spark.sql.types.DataTypes;
  10. import org.apache.spark.sql.types.StructField;
  11. import org.apache.spark.sql.types.StructType;
  12. import org.apache.spark.storage.StorageLevel;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import org.apache.spark.SparkConf;
  16. public class CreateDataFrame2 {
  17. public static void main(String[] args) {
  18. SparkConf conf = new SparkConf();
  19. conf.set("spark.testing.memory", "2147480000"); // 因为jvm无法获得足够的资源
  20. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App", conf);
  21. System.out.println(sc);
  22. // sc is an existing JavaSparkContext.
  23. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
  24. // Load a text file and convert each line to a JavaBean.
  25. JavaRDD<String> people = sc.textFile("hdfs://master:9000/testFile/people.txt");
  26. // Convert records of the RDD (people) to Rows.
  27. JavaRDD<Row> rowRDD = people.map(new Function<String, Row>() {
  28. public Row call(String record) throws Exception {
  29. String[] fields = record.split(",");
  30. return RowFactory.create(fields[0], fields[1].trim());
  31. }
  32. });
  33. // The schema is encoded in a string
  34. String schemaString = "name age";
  35. // Generate the schema based on the string of schema
  36. List<StructField> fields = new ArrayList<StructField>();
  37. for (String fieldName : schemaString.split(" ")) {
  38. // true表示可以为空
  39. fields.add(DataTypes.createStructField(fieldName, DataTypes.StringType, true));
  40. }
  41. StructType schema = DataTypes.createStructType(fields);
  42. // Apply the schema to the RDD.
  43. DataFrame peopleDataFrame = sqlContext.createDataFrame(rowRDD, schema);
  44. // Register the DataFrame as a table.
  45. peopleDataFrame.registerTempTable("people");
  46. // SQL can be run over RDDs that have been registered as tables.
  47. DataFrame results = sqlContext.sql("SELECT name FROM people");
  48. // The results of SQL queries are DataFrames and support all the normal
  49. // RDD operations.
  50. // The columns of a row in the result can be accessed by ordinal.
  51. List<String> names = results.javaRDD().map(new Function<Row, String>() {
  52. public String call(Row row) {
  53. return "Name: " + row.getString(0);
  54. }
  55. }).collect();
  56. results.persist(StorageLevel.MEMORY_ONLY());
  57. System.out.println(names);
  58. }
  59. }

数据源(Data Sources)

Spark SQL支持通过DataFrame接口在多种数据源上进行操作。一个DataFrame可以如同一个标准的RDDs那样进行操作,还可以注册成临时的表。将一个DataFrame注册成临时表允许你在它的数据上运行SQL查询。本节介绍使用Spark数据源装载和保存数据的常用方法,使用Spark数据源保存数据。然后进入可用于内置数据源的特定选项。

通用的加载/保存功能(Generic Load/Save Functions)

在最简单的形式中,默认的数据源(parquet除非通过spark.sql.sources.default另外进行配置)将被用于所有的操作。

  1. package com.tg.spark.sql;
  2. import java.util.List;
  3. import org.apache.spark.SparkConf;
  4. import org.apache.spark.api.java.JavaSparkContext;
  5. import org.apache.spark.api.java.function.Function;
  6. import org.apache.spark.sql.DataFrame;
  7. import org.apache.spark.sql.Row;
  8. import org.apache.spark.sql.SQLContext;
  9. import org.apache.spark.sql.SaveMode;
  10. import org.apache.spark.storage.StorageLevel;
  11. /**
  12. * 加载默认的数据源格式并保存
  13. * //第一种读取方式xxxFile(path)
  14. * @author Administrator
  15. *
  16. */
  17. public class DataSource {
  18. public static void main(String[] args) {
  19. SparkConf conf = new SparkConf();
  20. conf.set("spark.testing.memory", "2147480000"); // 因为jvm无法获得足够的资源
  21. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App", conf);
  22. System.out.println(sc);
  23. // sc is an existing JavaSparkContext.
  24. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
  25. DataFrame df = sqlContext.read().load("hdfs://master:9000/testFile/users.parquet");
  26. df.select("name", "favorite_color").write().save("namesAndFavColors.parquet");
  27. //指定保存模式
  28. //df.select("name", "favorite_color").write().mode(SaveMode.Overwrite).save("namesAndFavColors.parquet");
  29. //第一种读取方式
  30. DataFrame parquetFile = sqlContext.parquetFile("namesAndFavColors.parquet");
  31. parquetFile.registerTempTable("people");
  32. // SQL can be run over RDDs that have been registered as tables.
  33. DataFrame teenagers = sqlContext.sql("SELECT name FROM people ");
  34. // The results of SQL queries are DataFrames and support all the normal RDD operations.
  35. // The columns of a row in the result can be accessed by ordinal.
  36. List<String> teenagerNames = teenagers.javaRDD().map(new Function<Row, String>() {
  37. public String call(Row row) {
  38. return "Name: " + row.getString(0);
  39. }
  40. }).collect();
  41. teenagers.persist(StorageLevel.MEMORY_ONLY());
  42. System.out.println(teenagerNames);
  43. }
  44. }

手动指定选项(Manually Specifying Options)

你还可以手动指定数据源,这些数据源将与任何额外的选项一同使用,你希望将这些选项传入到数据源中。数据源是通过它们的全名来指定的(如org.apache.spark.sql.parquet),但是对于内置的数据源,你也可以使用简短的名称(json, parquet, jdbc)。任何类型的DataFrames使用这些语法可以转化成其他的数据源:

  1. package com.tg.spark.sql;
  2. import java.util.List;
  3. import org.apache.spark.SparkConf;
  4. import org.apache.spark.api.java.JavaSparkContext;
  5. import org.apache.spark.api.java.function.Function;
  6. import org.apache.spark.sql.DataFrame;
  7. import org.apache.spark.sql.Row;
  8. import org.apache.spark.sql.SQLContext;
  9. import org.apache.spark.storage.StorageLevel;
  10. /**
  11. * 加载指定的数据源格式并保存
  12. * //第二种读取方式sqlContext.read().XXX(path)
  13. * @author Administrator
  14. *
  15. */
  16. public class DataSource2 {
  17. public static void main(String[] args) {
  18. SparkConf conf = new SparkConf();
  19. conf.set("spark.testing.memory", "2147480000"); // 因为jvm无法获得足够的资源
  20. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App", conf);
  21. System.out.println(sc);
  22. // sc is an existing JavaSparkContext.
  23. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
  24. DataFrame df = sqlContext.read().format("json").load("hdfs://master:9000/testFile/people.json");
  25. df.select("name", "age").write().format("parquet").save("people.parquet");
  26. DataFrame parquetFile = sqlContext.read().parquet("people.parquet");
  27. // Parquet files can also be registered as tables and then used in SQL statements.
  28. parquetFile.registerTempTable("parquetFile");
  29. DataFrame teenagers = sqlContext.sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19");
  30. List<String> teenagerNames = teenagers.javaRDD().map(new Function<Row, String>() {
  31. public String call(Row row) {
  32. return "Name: " + row.getString(0);
  33. }
  34. }).collect();
  35. teenagers.persist(StorageLevel.MEMORY_ONLY());
  36. System.out.println(teenagerNames);
  37. }
  38. }

保存模式(Save Modes)

Save操作可以可选择性地接收一个SaveModel,如果数据已经存在了,指定如何处理已经存在的数据。意识到这些保存模式没有利用任何锁,也不是原子的,这很重要。因此,如果有多个写入者试图往同一个地方写入,这是不安全的。此外,当执行一个Overwrite,在写入新的数据之前会将原来的数据进行删除。

df.select("name", "favorite_color").write().mode(SaveMode.Overwrite).save("namesAndFavColors.parquet");

Scala/Java

Python

Meaning

SaveMode.ErrorIfExists (default)

"error" (default)

When saving a DataFrame to a data source, if data already exists, an exception is expected to be thrown.

当往一个数据源中保存一个DataFrame,如果数据已经存在,会抛出一个异常。

SaveMode.Append

"append"

When saving a DataFrame to a data source, if data/table already exists, contents of the DataFrame are expected to be appended to existing data.

当往一个数据源中保存一个DataFrame,如果data/table已经存在,DataFrame的内容会追加到已经存在的数据后面。

SaveMode.Overwrite

"overwrite"

Overwrite mode means that when saving a DataFrame to a data source, if data/table already exists, existing data is expected to be overwritten by the contents of the DataFrame.

Overwrite模式意味着当向数据源中保存一个DataFrame时,如果data/table已经存在了,已经存在的数据会被DataFrame中内容覆盖掉。

SaveMode.Ignore

"ignore"

Ignore mode means that when saving a DataFrame to a data source, if data already exists, the save operation is expected to not save the contents of the DataFrame and to not change the existing data. This is similar to a `CREATE TABLE IF NOT EXISTS` in SQL.

Ignore模式意味着当向数据源中保存一个DataFrame时,如果数据已经存在,save操作不会将DataFrame的内容进行保存,也不会修改已经存在的数据。这与SQL中的`CREATE TABLE IF NOT EXISTS`相似。

Parquet 文件

Parquet是一种列式存储格式的文件,被许多其他数据处理系统所支持。Spark SQL支持度对Parquet文件的读和写,自动保存原有数据的模式。

代码上面用过一次

  1. package com.tg.spark.sql;
  2. import java.util.List;
  3. import org.apache.spark.SparkConf;
  4. import org.apache.spark.api.java.JavaSparkContext;
  5. import org.apache.spark.api.java.function.Function;
  6. import org.apache.spark.sql.DataFrame;
  7. import org.apache.spark.sql.Row;
  8. import org.apache.spark.sql.SQLContext;
  9. import org.apache.spark.sql.SaveMode;
  10. import org.apache.spark.storage.StorageLevel;
  11. /**
  12. * 加载默认的数据源格式并保存
  13. * //第一种读取方式xxxFile(path)
  14. * @author Administrator
  15. *
  16. */
  17. public class DataSource {
  18. public static void main(String[] args) {
  19. SparkConf conf = new SparkConf();
  20. conf.set("spark.testing.memory", "2147480000"); // 因为jvm无法获得足够的资源
  21. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App", conf);
  22. System.out.println(sc);
  23. // sc is an existing JavaSparkContext.
  24. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
  25. DataFrame df = sqlContext.read().load("hdfs://master:9000/testFile/users.parquet");
  26. df.select("name", "favorite_color").write().save("namesAndFavColors.parquet");
  27. //指定保存模式
  28. //df.select("name", "favorite_color").write().mode(SaveMode.Overwrite).save("namesAndFavColors.parquet");
  29. //第一种读取方式
  30. DataFrame parquetFile = sqlContext.parquetFile("namesAndFavColors.parquet");
  31. parquetFile.registerTempTable("people");
  32. // SQL can be run over RDDs that have been registered as tables.
  33. DataFrame teenagers = sqlContext.sql("SELECT name FROM people ");
  34. // The results of SQL queries are DataFrames and support all the normal RDD operations.
  35. // The columns of a row in the result can be accessed by ordinal.
  36. List<String> teenagerNames = teenagers.javaRDD().map(new Function<Row, String>() {
  37. public String call(Row row) {
  38. return "Name: " + row.getString(0);
  39. }
  40. }).collect();
  41. teenagers.persist(StorageLevel.MEMORY_ONLY());
  42. System.out.println(teenagerNames);
  43. }
  44. }

JSON数据集(JSON Datasets)

Spark SQL可以自动推断出JSON数据集的模式,将它作为DataFrame进行加载。这个转换可以通过使用SQLContext中的下面两个方法中的任意一个来完成。
• jsonFile - 从一个JSON文件的目录中加载数据,文件中的每一个行都是一个JSON对象。

• jsonRDD - 从一个已经存在的RDD中加载数据,每一个RDD的元素是一个包含一个JSON对象的字符串。

代码前面都有涉及到

  1. public class DataSource3 {
  2. public static void main(String[] args) {
  3. SparkConf conf = new SparkConf();
  4. conf.set("spark.testing.memory", "2147480000"); // 因为jvm无法获得足够的资源
  5. JavaSparkContext sc = new JavaSparkContext("local", "First Spark App", conf);
  6. System.out.println(sc);
  7. // sc is an existing JavaSparkContext.
  8. SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);
  9. // A JSON dataset is pointed to by path.
  10. // The path can be either a single text file or a directory storing text files.
  11. DataFrame people = sqlContext.read().json("hdfs://master:9000/testFile/people.json");
  12. //DataFrame people = sqlContext.jsonFile("hdfs://master:9000/testFile/people.json");
  13. // The inferred schema can be visualized using the printSchema() method.
  14. people.printSchema();
  15. // root
  16. //  |-- age: integer (nullable = true)
  17. //  |-- name: string (nullable = true)
  18. // Register this DataFrame as a table.
  19. people.registerTempTable("people");
  20. // SQL statements can be run by using the sql methods provided by sqlContext.
  21. DataFrame teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19");
  22. // Alternatively, a DataFrame can be created for a JSON dataset represented by
  23. // an RDD[String] storing one JSON object per string.
  24. List<String> jsonData = Arrays.asList(
  25. "{\"name\":\"Yin\",\"address\":{\"city\":\"Columbus\",\"state\":\"Ohio\"}}");
  26. JavaRDD<String> anotherPeopleRDD = sc.parallelize(jsonData);
  27. DataFrame anotherPeople = sqlContext.read().json(anotherPeopleRDD);
  28. anotherPeople.show();
  29. }
  30. }

Datasets

Datasets是新出的接口在1.6版本,为了使RDDS更便利(强类型,能使用强大的lambda函数),可以通过JVM对象构建或者通过熟练使用函数化转换得到(map, flatMap, filter, etc)
The unified Dataset API can be used both in Scala and Java. Python does not yet have support for the Dataset API, but due to its dynamic nature many of the benefits are already available (i.e. you can access the field of a row by name naturally row.columnName). Full python support will be added in a future release.

至于怎么用spark操作hive和其他数据库,以后再做学习

码字不易,转载请指明出处http://blog.csdn.net/tanggao1314/article/details/51594942

更多内容,请参考官网 Spark sql 编程指南

Spark(1.6.1) Sql 编程指南+实战案例分析的更多相关文章

  1. Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析

    1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...

  2. Spark SQL编程指南(Python)

    前言   Spark SQL允许我们在Spark环境中使用SQL或者Hive SQL执行关系型查询.它的核心是一个特殊类型的Spark RDD:SchemaRDD.   SchemaRDD类似于传统关 ...

  3. Spark SQL编程指南(Python)【转】

    转自:http://www.cnblogs.com/yurunmiao/p/4685310.html 前言   Spark SQL允许我们在Spark环境中使用SQL或者Hive SQL执行关系型查询 ...

  4. shell脚本编程——生产实战案例

    生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要 ...

  5. spark RDD官网RDD编程指南

    http://spark.apache.org/docs/latest/rdd-programming-guide.html#using-the-shell Overview(概述) 在较高的层次上, ...

  6. MySQL选择的执行计划性能底下原因分析--实战案例分析

    MySQL是自动会选择它认为好的执行划,但是MySQL毕竟是程序,还没有达到像人类思考这么智能,还是通过一些按部就班的算法实现最优执行计划(基于cost)的选择.下面就是一个真实的案例,带你来看看My ...

  7. SQL Server阻塞blocking案例分析

    今天在性能测试过程中发现大量阻塞报警,检查whoisactive(https://github.com/amachanic/sp_whoisactive/)数据发现,阻塞blocking头部sessi ...

  8. Spark结构式流编程指南

    Spark结构式流编程指南 概览 Structured Streaming 是一个可拓展,容错的,基于Spark SQL执行引擎的流处理引擎.使用小量的静态数据模拟流处理.伴随流数据的到来,Spark ...

  9. SparkR(R on Spark)编程指南 含 dataframe操作 2.0

    SparkR(R on Spark)编程指南 Spark  2015-06-09 28155  1评论 下载为PDF    为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...

随机推荐

  1. 发邮件、排序、FIFO

      发送邮件.py:   import smtplib from email.mime.text import MIMEText   def email(receiver, title='标题', b ...

  2. lis nlogn算法

    当前所在位的最长上升子序列只和前面一个字符有关 #include <iostream> #include <algorithm> using namespace std; ]; ...

  3. python模块补充

    一.模块补充 configparser 1.基本的读取配置文件 -read(filename) 直接读取ini文件内容 -sections() 得到所有的section,并以列表的形式返回 -opti ...

  4. 冲刺博客NO.1

    今天小组开了一个会议来对APP进行模块分析,从客户需求 隐私问题到  界面设计大致定了一个方向并分工. 做的内容:对自己负责的模块进行了粗略的划分和认识,学会了如何页面跳转. 我负责的是登录界面,主界 ...

  5. IT项目管理流程以及每个步骤用到的文档

    IT项目管理从大的方面可分为:1)项目启动阶段:2)项目计划阶段:3)项目的实施阶段:4)项目的结项阶段 1)项目启动阶段: 1.项目启动流程规范: 1.1项目启动的简介.目的和范围 1.2目的可行性 ...

  6. 3.1.1随机事件的概率的Breamer(2018-03-22)

    % !Mode:: "TeX:UTF-8" \documentclass[xcolor=svgnames,serif,table,12pt]{beamer}%, %\include ...

  7. 索引视图DEMO2

    use tempdb ----在创建视图和所有底层表时,必须打开ANSI_NULLS以及QUOTED_IDENTIFIER选项 --SET ANSI_NULLS ON --GO --SET QUOTE ...

  8. mysql-5.7安装、配置

    1.进入到要存放安装包的位置 cd /home/lnmp 2.查看系统中是否已安装 MySQL 服务,以下提供两种方式: rpm -qa | grep mysql yum list installed ...

  9. netcore的Session使用小记

    之前说过,core需要什么功能就添加并使用什么中间件 照例,在Startup.cs的ConfigureServices方法中添加services.AddSession();再在Configure方法中 ...

  10. 多个文本框录入,使用回车键替找Tab键

    为了快速把form的所有文框输入完毕,我们不必使用鼠标去focus文本框. 在html页中放几个文本框: <div class="DivInput"> <div& ...