2小时入门SparkSQL编程

hg8868皇冠手机登录

首先,RDD,DataFrame和DataSet

DataFrame引用了Pandas的想法,将schma添加到RDD,并且可以获取列名信息。

DataSet进一步添加了基于DataFrame的数据类型信息,可以在编译时找到。

DataFrame可以看作是DataSet [Row],两者的API接口是相同的。

DataFrame和DataSet都支持SQL交互式查询,可以与Hive无缝连接。

DataSet仅在Scala语言的Spark接口和Java语言中受支持。它仅支持Python和R语言接口中的DataFrame,并且不支持DataSet。

e876e1a2f9ad4e53a8efb7bfcf0e1809

f572b15031bd4424bb6bdc8e201f609d

其次,创建一个DataFrame

1,由toDF方法创建

您可以将Seq,List或RDD转换为DataFrame。

1073da2560274763b8782e1da08953da

cca6c76ebe3d4e57a488848ef8521d28

2b224752b2904f27b43b8069e7860320

2,通过CreateDataFrame方法

动态创建DataFrame

您可以通过createDataFrame方法指定rdd和schema来创建DataFrame。

此方法很麻烦,但您可以在代码中动态创建DataFrame,而无需事先了解架构和数据类型。

f9ae0b20c96f44c586cacd9334d511bf

3,通过阅读文件创建

您可以读取json文件,csv文件,hive数据表或mysql数据表来获取DataFrame。

8bdd872cfae24361b2b35cee6cbcc54f

8b17682d2ec94b1cb06e33016586b496

daaaa50c3a7847eaab97f838fb754bfe

d1276af0d8c34786a350917fbbf5c973

652bcb33ee1a4d538aecd83946daad12

第三,创建一个DataSet

DataSet主要通过toDS方法从Seq,List或RDD数据类型转换,或通过as方法从DataFrame转换。

1,由toDS方法创建

您可以将Seq,List或RDD转换为DataFrame。

fabd5d02fe6e448398bb0e633cc7d3b2

7cfaa2de20154c538de2043c0ed4e07a

2,通过DataFrame的转换方法获取DataSet

635098dd6bbb47f981273e6cff0d2cc4

第四,RDD,DataFrame和DataSet是相互转换的

Spark的RDD,DataFrame和DataSet数据结构可以相互转换。

2aed16f074e7493ca1ea68d57a201c90

261439d9a3b44cd4bb3ecacf9fb77472

bd3484f34728464087b4b86c9bc48d16

bad5c96d828942d5bed38f056e55ddbd

1b341b7adf7b4df4955e309428eecada

第五,DataFrame/DataSet保存为文件

可以保存为csv文件,json文件,镶木地板文件或保存为配置单元数据表。

8d8b3389b70e4c709e7a194b59a01233

六,DataFrame API交互

DataFrame和DataSet具有相同的API,它演示了DataFrame常用的一些API。

1,动作操作

DataFrame的Action操作包括show,count,collect,collectAsList,describe,take,takeAsList,head,first等。

9961b3231b674905ad776326e035c0f0

b8b994056d5a46f3b1cc5086a73f3bb5

f8843519c9df4a8ea09c68990a1c1152

f1fa12df1a514a35829544d6e8a7fd60

2,类RDD操作

DataFrame支持RDD常用的map,flatMap,filter,reduce,distinct,cache,sample,mapPartitions,foreach,intersect,except等操作。

DataFrame可以作为RDD操作,数据类型为Row。

fd012fa6fed145429d2064ad73a26d87

6304ea727d26419d9061fad546291fc3

f17a7947bbf14b13a4bc75b4f0028fb6

5bb7a5cffd25482da91cac1adda45542

ea62d80202694015b8ca7344b5d1d47d

85a0bc1777c044e6b630ae5aad3c5964

64362dc5b57c454c84949e660b90a241

3,类Excel操作

您可以向DataFrame添加列,删除列,重命名列,排序等,删除重复行,删除空行,就像使用Excel电子表格一样。

14dba162fcfa47928d5b252c8dc76511

437380a6f34f49c3ab94602dab142adc

f0077882c77d4c79a24a3b1a27684f54

539733b814274a85a79da1dc56b41472

ea6c2660040f4f6896e0a0bdcdd998ff

84073ad9a83f4829b868344de3fe99cf

337d34fa18474012be569aa1b9d917f2

6b1414f6c150498e9c5d5e60b6d7f6f4

75257a3c7f5441ccaf1e35e96df8bd43

492c5ea0e6f14c1e9d20bc5b3dedc69c

4,类SQL表操作

类SQL表操作包括表查询(select,selectExpr,where,filter),表连接(join,union,unionAll),表组聚合(groupby,agg,pivot)等操作。

cb0783f5469048c290de000fff3d0a18

d66512fbc54948a4903bc31d9cede46c

ce17dea3013c4d80b8529a7f6ef82258

eea95a3352b14dcc8f634e98ba60817a

b038e5adfa6f455989e45bfd46372d4f

b847b253a20e4962b008d61d14f7940c

5c74ae89965d47feacc0af82cd19b19f

2df3d6ffcaef49f6980f2fe000272677

16396bd01ab84332a0cfb8a95c961976

7f2d14e0ae4d4baba973fe105c0f214f

a5e31f62cc7b43a6aa39a0112f2bb85b

51bb03680d244efbacb744759c1e1093

b6cccc4e143445c68500a9d568393988

七,DataFrame SQL交互

将DataFrame/DataSet注册为临时表视图或全局表视图后,可以使用sql语句与DataFrame进行交互。

以下是示例代码。

2487b83ba3ff4587817d77f7fcb605f2

ccedc061dbad49c0b0b9d554fd9c4133

51dfbc0e5cb74c93b2fb0e2b6dd97814

348f1d1785d9461da77c0eb3672c0c1b

八,用户定义的功能

SparkSQL的用户定义函数包括两种类型,UDF和UDAF,它们是常见的用户定义函数和用户定义的聚合函数。

其中,UDAF分为弱型UDAF和强型UDAF。前者可用于DataFrame,DataSet和SQL语句。后者只能在DataSet中使用。

1,普通UDF

f4f4ed6714c04573b6efb6db9891d96f

8ade1cc3010e460f8fe511847cd234b7

2,弱型UDAF

弱类型的UDAF需要继承UserDefinedAggregateFunction。

15d8c2faaa1540d09d287c05423bcddc

8a924f6909a1424abf442ba0189b1c26

56f93ad73ea64d97a4b15c1684fbb5dd

68d933efb6ff4efca570fe9f1a0b6f10

3,强力型UDAF

强类型UDAF需要从Aggregator继承而无法注册。

c8d72020f5a341dfbc3e5e2371b4b377

6fd180c753d74401aa786fe3fdd3448d

628f99a506514f23a1efb3243cf37b17

开始使用SparkSQL编程需要2个小时