一、从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本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Apache Spark DataFrames入门指南:创建DataFrame】(https://www.iteblog.com/archives/1565.html)