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 条评论