在 HDInsight 上的 Apache Spark 群集中将外部包与 Jupyter 笔记本配合使用

了解如何在 HDInsight 上的 Apache Spark 群集中配置 Jupyter 笔记本,以使用未现成包含在群集中的、由社区贡献的外部 maven 包。

可以在 Maven 存储库 中搜索可用包的完整列表。 也可以从其他源获取可用包的列表。 例如, Spark 包中提供了社区贡献包的完整列表。

本文介绍如何将 spark-csv 包与 Jupyter 笔记本配合使用。

先决条件

必须满足以下条件:

将外部包与 Jupyter 笔记本配合使用

Note

在 Azure 中国区,HDInsight Linux 仅支持 3.5 或更高版本。 在 Azure 中国区无法创建 HDInsight Linux 3.2、3.3 和 3.4。 但是,可以通过 HDInsight 模拟器使用这些版本。

  1. Azure 门户上的启动板中,单击 Spark 群集的磁贴(如果已将它固定到启动板)。 也可以单击“全部浏览” > “HDInsight 群集”导航到群集。
  2. 在 Spark 群集边栏选项卡中单击“快速链接”,并在“群集仪表板”边栏选项卡中单击“Jupyter 笔记本”。 出现提示时,请输入群集的管理员凭据。

    Note

    也可以在浏览器中打开以下 URL 来访问群集的 Jupyter 笔记本。 将 CLUSTERNAME 替换为群集的名称:

    https://CLUSTERNAME.azurehdinsight.cn/jupyter

  3. 创建新的笔记本。 单击“新建”,并单击“Spark”。

    创建新的 Jupyter 笔记本

  4. 随即创建新笔记本,并以 Untitled.pynb 名称打开。 单击顶部的笔记本名称,并输入一个友好名称。

    提供笔记本的名称

  5. 使用 %%configure magic 将笔记本配置为使用外部包。 在使用外部包的笔记本中,确保在第一个代码单元中调用 %%configure magic。 这可以确保将内核配置为在启动会话之前使用该包。

    Important

    如果忘记了在第一个单元中配置内核,可以结合 -f 参数使用 %%configure,但这会重新启动会话,导致所有进度都会丢失。

    HDInsight 版本 命令
    对于 HDInsight 3.3 和 HDInsight 3.4 %%configure
    { "packages":["com.databricks:spark-csv_2.10:1.4.0"] }
    对于 HDInsight 3.5 和 HDInsight 3.6 %%configure
    { "conf": {"spark.jars.packages": "com.databricks:spark-csv_2.10:1.4.0" }}
  6. 上述代码片段需要 Maven 中心存储库中用于外部包的 maven 坐标。 在此代码片段中, com.databricks:spark-csv_2.10:1.4.0spark-csv 包的 maven 坐标。 下面说明了如何构造包的坐标。

    a. 在 Maven 存储库中找出该包。 在本教程中,我们使用 spark-csv

    b. 从存储库中收集 GroupIdArtifactIdVersion 的值。 确保收集的值与群集相匹配。 本示例中,我们使用 Scala 2.10 和 Spark 1.4.0 包,但可能需要选择群集中相应的 Scala 或 Spark 版本的不同版本。 通过在 Spark Jupyter 内核或 Spark 提交上运行 scala.util.Properties.versionString,可以找出群集上的 Scala 版本。 通过在 Jupyter 笔记本上运行 sc.version,可以找出群集上的 Spark 版本。

    将外部包与 Jupyter 笔记本配合使用

    c. 串连这三个值并以冒号分隔 (:)。

     com.databricks:spark-csv_2.10:1.4.0
    
  7. 结合 %%configure magic 运行代码单元。 这会将基础 Livy 会话配置为使用提供的包。 现在,可以在笔记本的后续单元中使用该包,如下所示。

     val df = sqlContext.read.format("com.databricks.spark.csv").
     option("header", "true").
     option("inferSchema", "true").
     load("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    

    对于 HDInsight 3.6,应使用以下代码片段。

     val df = spark.read.format("com.databricks.spark.csv").
     option("header", "true").
     option("inferSchema", "true").
     load("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
  8. 然后,可以运行代码片段(如下所示)以查看上一步骤创建的数据帧中的数据。

     df.show()
    
     df.select("Time").count()
    

另请参阅

方案

创建和运行应用程序

工具和扩展

管理资源