Spark on Microsoft Azure(2)-Using Jupyter notebook to run a spark SQL query

这是Spark in Azure系列文章。

Spark on Microsoft Azure(1)-Create a Spark in HDInsight


此前的文章介绍了如何在Azure Portal中创建Spark。这篇文章主要介绍使用Jupyter笔记本执行sql查询。


Azure HDInsight中默认包括了Jupyter笔记本。使用Jupyter笔记本,你可以使用两种不同的内核来执行,PySpark内核执行Python编写的应用,Spark内核执行Scala编写的应用。这里使用PySpark内核。


1、进入Jupyter笔记本。点击概览-》快速链接-》群集仪表盘-》Jupyter笔记本。可能需要你输入集群的用户名和密码。


2、进入后,Jupyter笔记本的主页如下图所示。


3、在Jupyter主页的右上方,点击New下拉框,选择PySpark


4、修改作业名称。本人修改为SQLInAzureSpark


5、由于我们使用的是PySpark内核,因此我们无需显示创建运行环境,Spark和Hive会在执行第一句Python代码的时候自动为我们创建Python的运行环境。我们输入以下代码,并按SHIFT+ENTER确认。

from pyspark.sql.types import *


6、执行上述代码后,Jupyter输出如下所示。


7、当创建Spark集群时,会将一些示例文件拷贝到Azure Storage中。如下图所示(使用Azure资源管理器http://codebox/azexplorer浏览,也可以使用VS浏览)。这里我们使用HVAC数据进行展示。我们可以看到期内的数据格式如下所示。

Date,Time,TargetTemp,ActualTemp,System,SystemAge,BuildingID
6/1/13,0:00:01,66,58,13,20,4
6/2/13,1:00:01,69,68,3,20,17
6/3/13,2:00:01,70,73,17,20,18
6/4/13,3:00:01,67,63,2,23,15
6/5/13,4:00:01,68,74,16,9,3
6/6/13,5:00:01,67,56,13,28,4
6/7/13,6:00:01,70,58,12,24,2
6/8/13,7:00:01,70,73,20,26,16
6/9/13,8:00:01,66,69,16,9,9
6/10/13,9:00:01,65,57,6,5,12
6/11/13,10:00:01,67,70,10,17,15
6/12/13,11:00:01,69,62,2,11,7
6/13/13,12:00:01,69,73,14,2,15


8、加载数据文件到Spark的临时表中。在Jupyter中输入以下代码。由代码可知,washs:///表示映射到了Azure Storage账户中,StructField方法的三个参数表示列名,类型以及是否可为空。filter(lambda s: s[0] != "Date")表示过滤第一行

# Load the data
hvacText = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")

# Create the schema
hvacSchema = StructType([StructField("date", StringType(), False),StructField("time", StringType(), False),StructField("targettemp", IntegerType(), False),StructField("actualtemp", IntegerType(), False),StructField("buildingID", StringType(), False)])

# Parse the data in hvacText
hvac = hvacText.map(lambda s: s.split(",")).filter(lambda s: s[0] != "Date").map(lambda s:(str(s[0]), str(s[1]), int(s[2]), int(s[3]), str(s[6]) ))

# Create a data frame
hvacdf = sqlContext.createDataFrame(hvac,hvacSchema)

# Register the data fram as a table to run queries against
hvacdf.registerTempTable("hvac")


9、接下来,我们可以直接使用hvac表进行sql查询了。格式如下:

%%sql
SELECT buildingID, (targettemp - actualtemp) AS temp_diff, date FROM hvac WHERE date = \"6/1/13\"

输出如下。由图可知,输出格式可以是表,也可以是其他的图形。


10、转化成其他的显示方式。这里选择显示方式为Bar,x轴选择BuildingId,Y轴选择平均的温差。如下图所示:

0 条评论

    发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注