spark中dataframe解析_Apache Spark DataFrames入门指南:创建DataFrame

本系列文章翻译自:《scala data analysis cookbook》第二章:Getting Started with Apache

一、从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文件中:

com.databricks

spark-csv_2.10

1.3.0

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值