欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:961
  2. 浏览总数:11,480,989
  3. 评论:3873
  4. 分类目录:103 个
  5. 注册用户数:5841
  6. 最后更新:2018年10月17日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

Apache Spark DataFrames入门指南:创建DataFrame

  本系列文章翻译自:《scala data analysis cookbook》第二章:Getting Started with Apache Spark DataFrames。原书是基于Spark 1.4.1编写的,我这里使用的是Spark 1.6.0,丢弃了一些已经标记为遗弃的函数。并且修正了其中的错误。
  一、从csv文件创建DataFrame
    如何做?
    如何工作的
    附录
  二、操作DataFrame
    打印DataFrame里面的模式
    对DataFrame里面的数据进行采样
    查询DataFrame里面的列
    根据条件过滤数据
    对DataFrame里面的数据进行排序
    对列进行重命名
    将DataFrame看作是关系型数据表
    对两个DataFrame进行Join操作
    将DataFrame保存成文件
  三、从Scala case class中创建DataFrame
    如何做?
    如何工作的
    附录

一、从csv文件创建DataFrame

  本文将介绍如何从csv文件创建DataFrame。

如何做?

  从csv文件创建DataFrame主要包括以下几步骤:
  1、在build.sbt文件里面添加spark-csv支持库;
  2、创建SparkConf对象,其中包括Spark运行所有的环境信息;
  3、创建SparkContext对象,它是进入Spark的核心切入点,然后我们可以通过它创建SQLContext对象;
  4、使用SQLContext对象加载CSV文件;
  5、Spark内置是不支持解析CSV文件的,但是Databricks公司开发了一个类库可以支持解析CSV文件。所以我们需要把这个依赖文件加载到依赖文件中(pom.xml或者是build.sbt)

如果你是SBT工程,请加入以下依赖到build.sbt文件中:

libraryDependencies += "com.databricks" % "spark-csv_2.10" % "1.3.0"

如果你是Maven工程,请加入以下依赖到pom.xml文件中:

<dependency>
	<groupid>com.databricks</groupid>
	<artifactid>spark-csv_2.10</artifactid>
	<version>1.3.0</version>
</dependency>

  6、SparkConf持有所有运行Spark程序的信息,在这个实例中,我们将以本地的方式运行这个程序,而且我们打算使用2个核(local[2]),部分代码片段如下:

import org.apache.spark.SparkConf
val conf = new SparkConf().setAppName("csvDataFrame").setMaster("local[2]")

  7、使用SparkConf初始化SparkContext对象,SparkContext是进入Spark的核心切入点:

val sc = new SparkContext(conf) 

在Spark中查询数据最简单的一种方式就是使用SQL查询,所以我们可以定义一个SQLContext对象:

val sqlContext=new SQLContext(sc) 

  8、现在我们就可以加载事先准备好的数据了:

import com.databricks.spark.csv._ 
val students=sqlContext.csvFile(filePath="StudentData.csv", useHeader=true, delimiter='|') 

其中,students对象的类型是org.apache. spark.sql.DataFrame

如何工作的

  csvFile方法接收需要加载的csv文件路径filePath,如果需要加载的csv文件有头部信息,我们可以将useHeader设置为true,这样就可以将第一行的信息当作列名称来读;delimiter指定csv文件列之间的分隔符。

  除了使用csvFile函数,我们还可以使用sqlContext里面的load来加载csv文件:

val options = Map("header" -> "true", "path" -> "E:\\StudentData.csv")
val newStudents = sqlContext.read.options(options).format("com.databricks.spark.csv").load()

附录

为了方便大家测试,我提供了StudentData.csv文件的部分数据集:

id|studentName|phone|email
1|Burke|1-300-746-8446|ullamcorper.velit.in@ametnullaDonec.co.uk
2|Kamal|1-668-571-5046|pede.Suspendisse@interdumenim.edu
3|Olga|1-956-311-1686|Aenean.eget.metus@dictumcursusNunc.edu
4|Belle|1-246-894-6340|vitae.aliquet.nec@neque.co.uk
5|Trevor|1-300-527-4967|dapibus.id@acturpisegestas.net
6|Laurel|1-691-379-9921|adipiscing@consectetueripsum.edu
7|Sara|1-608-140-1995|Donec.nibh@enimEtiamimperdiet.edu
8|Kaseem|1-881-586-2689|cursus.et.magna@euismod.org
9|Lev|1-916-367-5608|Vivamus.nisi@ipsumdolor.com
10|Maya|1-271-683-2698|accumsan.convallis@ornarelectusjusto.edu
11|Emi|1-467-270-1337|est@nunc.com
12|Caleb|1-683-212-0896|Suspendisse@Quisque.edu
13|Florence|1-603-575-2444|sit.amet.dapibus@lacusAliquamrutrum.ca
14|Anika|1-856-828-7883|euismod@ligulaelit.co.uk
15|Tarik|1-398-171-2268|turpis@felisorci.com
16|Amena|1-878-250-3129|lorem.luctus.ut@scelerisque.com
17|Blossom|1-154-406-9596|Nunc.commodo.auctor@eratSed.co.uk
18|Guy|1-869-521-3230|senectus.et.netus@lectusrutrum.com
19|Malachi|1-608-637-2772|Proin.mi.Aliquam@estarcu.net
20|Edward|1-711-710-6552|lectus@aliquetlibero.co.uk
本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Apache Spark DataFrames入门指南:创建DataFrame】(https://www.iteblog.com/archives/1565.html)
喜欢 (14)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!