在 Bluemix 上使用 Spark 在浏览器中分析天气数据(2)
 
- UID
- 1066743
|

在 Bluemix 上使用 Spark 在浏览器中分析天气数据(2)
第 3 步. 将数据更新到您的 notebook- 访问 National Centers for Environmental Information (NCEI) 站点:。
- 单击第二个链接 Global Historical Climatology Network-Daily (GHCN-D)。
- 单击 GHCN-Daily FTP Access 链接。
- 单击 by_year 文件夹链接。
- 滚动到底部并单击 2015.cs.gz 链接来下载它。
- 在您的本地平台上使用适当的工具解压 2015.cs.gz 文件。在您喜爱的文本编辑器中打开得到的 .csv 文件,并将以下列标题作为首行添加到文件中:
STATION,DATE,METRIC,VALUE,C5,C6,C7,C8 - 2015.csv 列包含一个天气站标识符、一个日期、一个将被收集的度量数据(降水量、每日最高温和最低温、观测时的温度、降雪、积雪深度,等等),列 C5 到 C8 包含其他一些信息。
 - 将 .csv 文件上传到您的 notebook。将整个文件上传到 Object Storage 需要花费几分钟的时间。
 第 4 步. 创建一个 RDD接下来,使用 SparkContext 根据 2015.csv 文件创建一个 RDD。
- 在使用 SparkContext 访问 Object Storage 中的存储文件之前,设置 Hadoop 配置。这可以使用以下函数完成:
1
2
3
4
5
6
7
8
9
10
| def: set_hadoop_config(credentials
prefix = "fs.swift.service." + credentials['name']
hconf = sc._jsc.hadoopConfiguration()
hconf.set(prefix + ".auth.url", credentials['auth_url']+'/v2.0/tokens')
hconf.set(prefix + ".auth.endpoint.prefix", "endpoints")
hconf.set(prefix + ".tenant", credentials['project_id'])
hconf.set(prefix + ".username", credentials['user_id'])
hconf.set(prefix + ".password", credentials['password'])
hconf.setInt(prefix + ".http.port", 8080)
hconf.set(prefix + ".region", credentials['region']
|
- 单击工具栏中的 Insert 按钮来插入一个单元格,并将代码粘贴到该单元格中。然后单击 Run 按钮来执行该代码。
 - 在执行该代码后,一个用括号括起来的数字会出现在 In 的旁边。该数字表明了整个 notebook 中的代码单元格的执行顺序。在本例中,该数字是 [1]。
 - 单击 Insert to code 创建一个新的代码单元格。.csv 文件的凭证会自动粘贴到其中。
 - 为了方便起见,我们将提供的凭证复制到某个文档中供进一步使用。我们已经使用访问 Object Storage 所需的条目完成该代码,所以您只需粘贴 credentials 行并运行该单元格。对于密钥的 'name',可以输入任何字符串作为该值。在这个示例中,使用的是 'keystone'。
1
2
3
4
5
6
7
| credentials = {}
credentials['name'] = 'keystone'
credentials['auth_url'] = 'https://xxxx.xxxxxxx.xxx'
credentials['project_id'] = 'xxxxxxxxxxx'
credentials['region'] = 'xxxxxxxxxxxx'
credentials['user_id'] = 'xxxxxxxxxxxxxx'
credentials['password'] = 'xxxxxxxxxxxx'
|
- 现在,您可以通过运行以下代码来设置 Hadoop 配置:
1
| set_hadoop_config(credentials)
|
- 使用存储在 Object Storage 中的原始数据文件,您现在可以通过运行下列代码,在您的 notebook 中使用已配置好的 SparkContext 访问它:
1
| weather = sc.textFile("swift://notebooks.keystone/2015.csv")
|
- 您创建的 RDD 是一个字符串集合,这些字符串对应于原始数据文件中的各行。重要的是要记住:RDD 虽然已经定义了,但尚未将它实例化。对 RDD 应用一个类似 count 的操作,强制高效完成其实例化:
1
| print "Total records in the 2015.csv dataset:", weather.count()
|
- 您可以对相同的 RDD 应用其他操作,以查看第一行数据。
1
| print "The first row in the 2015.csv dataset:", weather.first()
|
结果应该如下所示

|
|
|
|
|
|