使用 spark-csv 在 zeppelin 中读取 csv 文件

Reading csv files in zeppelin using spark-csv

我想在 Zeppelin 中读取 csv 文件并且想使用数据块' spark-csv 包:https://github.com/databricks/spark-csv

在 spark-shell 中,我可以将 spark-csv 与

一起使用
spark-shell --packages com.databricks:spark-csv_2.11:1.2.0

但是我该如何告诉 Zeppelin 使用那个包呢?

提前致谢!

开始编辑

%dep 在 Zeppelin 0.6.0 中被弃用。请参考Paul-Armand Verhaegen的回答。

如果您使用的 zeppelin 早于 0.6.0,请进一步阅读此答案

编辑结束

您可以使用 %dep 解释器加载 spark-csv 包。

喜欢,

%dep
z.reset()

// Add spark-csv package
z.load("com.databricks:spark-csv_2.10:1.2.0")

请参阅 https://zeppelin.incubator.apache.org/docs/interpreter/spark.html

中的依赖加载部分

如果你已经初始化了 Spark Context,快速的解决方法是重启 zeppelin 并先执行带有上面代码的 zeppelin 段落,然后执行你的 spark 代码来读取 CSV 文件

您需要先将 Spark 包存储库添加到 Zeppelin,然后才能在 spark 包上使用 %dep。

%dep
z.reset()
z.addRepo("Spark Packages Repo").url("http://dl.bintray.com/spark-packages/maven")
z.load("com.databricks:spark-csv_2.10:1.2.0")

或者,如果这是您希望在所有笔记本中都可用的东西,您可以将 --packages 选项添加到 Zeppelin 解释器配置中的 spark-submit 命令设置,然后重新启动解释器。这应该启动一个上下文,其中已经按照 spark-shell 方法加载了包。

如果你定义在conf/zeppelin-env.sh

export SPARK_HOME=<PATH_TO_SPARK_DIST>

Zeppelin 然后会在 $SPARK_HOME/conf/spark-defaults.conf 中查找,您可以在那里定义 jars:

spark.jars.packages                com.databricks:spark-csv_2.10:1.4.0,org.postgresql:postgresql:9.3-1102-jdbc41

接着看

http://zepplin_url:4040/environment/ 用于以下内容:

spark.jars file:/root/.ivy2/jars/com.databricks_spark-csv_2.10-1.4.0.jar,file:/root/.ivy2/jars/org.postgresql_postgresql-9.3-1102-jdbc41.jar

spark.jars.packages com.databricks:spark-csv_2.10:1.4.0,org.postgresql:postgresql:9.3-1102-jdbc41

更多参考:https://zeppelin.incubator.apache.org/docs/0.5.6-incubating/interpreter/spark.html

  1. 转到解释器选项卡,单击存储库信息,添加一个存储库并将 URL 设置为 http://dl.bintray.com/spark-packages/maven
  2. 向下滚动到 spark 解释器段落并单击编辑,向下滚动一点到工件字段并添加 "com.databricks:spark-csv_2.10:1.2.0" 或更新版本。然后在询问时重新启动解释器。
  3. 在笔记本中,使用如下内容:

    import org.apache.spark.sql.SQLContext
    
    val sqlContext = new SQLContext(sc)
    val df = sqlContext.read
        .format("com.databricks.spark.csv")
        .option("header", "true") // Use first line of all files as header
        .option("inferSchema", "true") // Automatically infer data types
        .load("my_data.txt")
    

更新:

在 Zeppelin 用户邮件列表中,Moon Soo Lee(Apache Zeppelin 的创建者)现在(2016 年 11 月)表示用户更愿意保留 %dep,因为它允许:

  • notebook 中的自文档库要求;
  • 每个注释(可能每个用户)库加载。

现在的趋势是保留 %dep,所以此时不​​应该被认为是折旧的。

另一个解决方案:

在 conf/zeppelin-env.sh(对我来说位于 /etc/zeppelin 中)添加行:

export SPARK_SUBMIT_OPTIONS="--packages com.databricks:spark-csv_2.10:1.2.0"

然后启动服务。

您可以在 Spark 解释器依赖项下添加 jar 文件:

  1. 单击导航栏中的 'Interpreter' 菜单。
  2. 单击 'edit' Spark 解释器按钮。
  3. 填充工件并排除字段。
  4. 按'Save'