Apache Zeppelin使用入门指南:编程

来源:互联网 发布:数据精灵官网 编辑:程序博客网 时间:2024/06/03 09:16
 Apache Zeppelin使用入门指南:安装
  Apache Zeppelin使用入门指南:编程
  Apache Zeppelin使用入门指南:添加外部依赖

使用Apache Zeppelin

  编译和启动完Zeppelin相关的进程之后,我们就可以来使用Zeppelin了。我们进入到http://www.iteblog.com:8080页面,我们可以在页面上直接操作Zeppelin,依次选择Notebook->Create new note,然后会弹出一个对话框,我们在Note Name里面随便输入一个名字,这里我输入iteblog,然后点击Create Note就可以创建一个新的Notebook了。我们可以在新建的Notebook里面输入相关的代码进行测试:

1sc.version
2sqlc
3 
4res26:String =1.5.2
5res27:org.apache.spark.sql.SQLContext =org.apache.spark.sql.SQLContext@48806d6c

  和Spark Shell一样,Zeppelin会初始化好SparkContextSQLContext对象,分别命名为scsqlc,我们可以直接在里面使用到它。接下来我们来在Zeppelin里面加载HDFS上面的数据,如下:

1sc.textFile("hdfs://www.iteblog.com/tmp/json").count
2 
3res29:Long =200
4Took 0seconds (outdated)

  我们再来使用sqlc对象读取上面的json文件来创建一个DataFrame:

01valprofilesJsonRdd =sqlc.jsonFile("hdfs://www.iteblog.com/tmp/json")
02valprofileDF=profilesJsonRdd.toDF()
03valiteblog =profileDF.selectExpr("_id""address""age""email")
04iteblog.show()
05profileDF.registerTempTable("profiles")
06 
07profilesJsonRdd:org.apache.spark.sql.DataFrame =[_id:string, about:string, address:string, age:bigint, company:string, email:string, eyeColor:string, favoriteFruit:string, gender:string, name:string, phone:string, registered:string, tags:array<string>]
08profileDF:org.apache.spark.sql.DataFrame =[_id:string, about:string, address:string, age:bigint, company:string, email:string, eyeColor:string, favoriteFruit:string, gender:string, name:string, phone:string, registered:string, tags:array<string>]
09root
10 |-- _id:string (nullable =true)
11 |-- about:string (nullable =true)
12 |-- address:string (nullable =true)
13 |-- age:long (nullable =true)
14 |-- company:string (nullable =true)
15 |-- email:string (nullable =true)
16 |-- eyeColor:string (nullable =true)
17 |-- favoriteFruit:string (nullable =true)
18 |-- gender:string (nullable =true)
19 |-- name:string (nullable =true)
20 |-- phone:string (nullable =true)
21 |-- registered:string (nullable =true)
22 |-- tags:array (nullable =true)
23 |    |-- element:string (containsNull =true)
24 
25iteblog:org.apache.spark.sql.DataFrame =[_id:string, address:string, age:bigint, email:string]
26+--------------------+--------------------+---+--------------------+
27|                 _id|             address|age|               email|
28+--------------------+--------------------+---+--------------------+
29|55578ccb0cc5b350d...|694Oriental Cour...| 30|tracynguyen@endip...|
30|55578ccb6975c4e2a...|267Amber Street,...| 23|leannagarrett@war...|
31|55578ccb33399a615...|243Bridgewater S...| 24|blairwhite@imperi...|
32|55578ccb0f1d5ab09...|647Loring Avenue...| 24|andrearay@beadzza...|
33|55578ccb591a45d4e...|721Bijou Avenue,...| 27|penningtongilbert...|
34|55578ccb9f0cd20c4...|694Llama Court, ...| 21|shelleyburns@pyra...|
35|55578ccb8d0accc28...|498Perry Terrace...| 40|nicolefigueroa@ed...|
36|55578ccbd682cca21...|243Stillwell Ave...| 32|galealvarado@sing...|
37|55578ccb0d9025ddd...|649Beard Street,...| 36|melindaparker@fur...|
38|55578ccb5be70de0d...|972Marconi Place...| 36|byerscarson@digia...|
39|55578ccbc5a1050a5...|483Hanson Place,...| 31|kristiemckinney@a...|
40|55578ccb07fa02369...|540Woodpoint Roa...| 40|salazarburks@micr...|
41|55578ccb809e55bf0...|442Ainslie Stree...| 32|hopkinspatterson@...|
42|55578ccb204ff8ee6...|444Argyle Road, ...| 23|maysrosario@imkan...|
43|55578ccb4b062fc61...|571Sunnyside Ave...| 38|atkinshancock@hel...|
44|55578ccba5ff361a9...|385Meeker Avenue...| 40|edwinarobertson@s...|
45|55578ccb386940ac3...|936Cheever Place...| 37|elsienoel@fleetmi...|
46|55578ccbfc41ff7fe...|406Lake Place, M...| 36|mirandamarsh@even...|
47|55578ccbfa6b6c300...|364Metropolitan ...| 31|sharronmcconnell@...|
48|55578ccbdd6650d81...|113Applegate Cou...| 29|mcdowellwelch@eur...|
49+--------------------+--------------------+---+--------------------+
50only showing top 20rows
51 
52Took 1seconds
  需要注意的是,因为Zeppelin会自动地初始化好SparkContext和SQLContext,所以我们不能再显示地创建SparkContext和SQLContext。如果你显示地创建了SQLContext,而且使用它来注册一张临时表,当你下一次使用这个临时表的时候将会出现以下的异常信息:

1no such table List ([iteblog])

  下面我们来使用上面注册的临时表,Zeppelin自带了SQL Interpreter,所以我们可以直接在上面编写SQL语句:

1%sql selecteyeColor, count(eyeColor) ascount from profiles where
2gender='male'group by eyeColor

  运行上面的SQL我们就可以得到图形化显示的结果,而且我们可以根据自己的需要选择饼型、条型、表格,线型等方式展现我们需要的结果!上面的SQL已经我们已经将查询的gender写死成male了,其实我们可以将这个值设置成参数的形式,然后我们可以在页面上输入相关的查询参数:

1%sql selecteyeColor, count(eyeColor) ascount from profiles where
2gender='male'group by eyeColor

然后我们运行这个sql,我们可以看到下图的运行结果:

可以看出这里出现了一个文本框gender,我们可以输入需要查询的条件比如:male,然后再运行就可以得到上面sql一样的结果。大家可能看到了,文本框里面是没有输入限制的,我们可以随便输入数据,而且你也不清楚到底有几种值可以输入。值得高兴的是,我们可以将这个值设置成只固定可选的:

1%sql selecteyeColor, count(eyeColor) ascount from profiles wheregender
2="${gender=male,male|female}"group by eyeColor

这里限制了gender的值只能选择male和female,而且默认male是选中的,如下:

有时候我们需要在SQL中使用自定义的函数,我们可以直接在Zeppelin中定义函数,然后在SQL使用它,如下:

1defageGroup(age:Long) ={
2    valbuckets =Array("0-10""11-20""20-30""31-40",
3     "41-50""51-60""61-70""71-80""81-90""91-100"">100")
4    buckets(math.min((age.toInt - 1) / 10, buckets.length - 1))
5}
6 
7ageGroup:(age:Long)String

为了能够在Spark SQL中使用这个函数,我们必须先注册这个函数:

1sqlc.udf.register("ageGroup", (age:Long)=>ageGroup(age.toInt))
2 
3res44:org.apache.spark.sql.UserDefinedFunction =UserDefinedFunction(<function1>,StringType,List())

然后我们就可以在Spark SQL中使用这个自定义函数:

1%sql selectageGroup(age) asiteblogAgeGroup,
2count(1) astotal
3fromprofiles
4wheregender='${gender=male,male|female}'group by ageGroup(age)
5orderby iteblogAgeGroup

运行的结果如下:

0 0
原创粉丝点击