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

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

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

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

先决条件

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

  1. 导航至 https://CLUSTERNAME.azurehdinsight.cn/jupyter,其中 CLUSTERNAME 是 Spark 群集的名称。

  2. 创建新的笔记本。 选择“新建”,然后选择“Spark”

    创建新的 Spark Jupyter 笔记本

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

    提供笔记本的名称

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

    重要

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

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

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

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

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

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

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

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

    对于 HDInsight 3.4 及更低版本,应使用以下代码片段。

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

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

另请参阅

方案

创建和运行应用程序

工具和扩展

管理资源