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

11

我想在Zeppelin中读取csv文件,并希望使用databricks的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使用那个包呢?

提前感谢!


2
https://zeppelin.incubator.apache.org/docs/interpreter/spark.html#dependencyloading - zero323
好的,已经将 %dep --packages com.databricks:spark-csv_2.11:1.2.0 添加到了 Zeppelin 笔记本中,但是出现了错误:"必须在 SparkInterpreter (%spark) 初始化之前使用"。然而,在笔记本中并没有使用 %spark。 - fabsta
%pyspark或%sql怎么样? - zero323
我不确定我理解了。@zero323,你能举个例子吗? - fabsta
你也可以尝试:ZEPPELIN_JAVA_OPTS="-Dspark.jars=/path/to/spark-csv" - zero323
显示剩余2条评论
6个回答

15

在使用%dep命令安装Spark Packages之前,您需要将Spark Packages存储库添加到Zeppelin中。

%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方法已经加载了该包。


1
%dep现已过时(0.6.1)...请参考Paul的答案(使用GUI)。 - Pete
True。如Paul所述,现在应该在解释器配置中完成此操作。 - Simon Elliston Ball
目前不应再认为%dep已经过时。请参考Paul-Armand的答案了解原因。 - Paul-Armand Verhaegen
不应使用此方法,因为使用此方法添加的JAR文件将不会分发到Spark执行器。 - Harvinder Singh
@HarvinderSingh 你确定吗?这种方法确实会将JAR文件作为提交到Spark的一部分进行分发,这就是为什么在运行Spark解释器之前必须运行这些注释的原因(至少在我测试过的旧版本Zeppelin中是这样)。话虽如此,这里提出的其他方法在新版本上提供了更清晰的替代方案。 - Simon Elliston Ball

8
  1. Go to the Interpreter tab, click Repository Information, add a repo and set the URL to http://dl.bintray.com/spark-packages/maven
  2. Scroll down to the spark interpreter paragraph and click edit, scroll down a bit to the artifact field and add "com.databricks:spark-csv_2.10:1.2.0" or a newer version. Then restart the interpreter when asked.
  3. In the notebook, use something like:

    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用户邮件列表中,Apache Zeppelin的创建者Moon Soo Lee(李文秀)现在(2016年11月)表示用户希望保留%dep,因为它允许:

  • 在笔记本中自我记录库需求;
  • 每个笔记(可能是每个用户)加载库。

目前的趋势是保留%dep,所以不应该被视为已经过时。


我不确定你所说的“创建repo”是什么意思。在我的Zeppelin解释器选项卡中,我可以创建一个全新的解释器环境。此外,我已经将Spark包URL添加到了zeppelin.dep.additionalRemoteRepository字段中,那么我应该如何确切地加载CSV包呢? - mar tin
@martin 点击“创建”按钮左侧的齿轮图标(用于创建全新的解释器环境,这不是您想要的),以创建一个仓库(repository)。这将展开可用的存储库列表,并显示一个“+”按钮。单击“+”按钮并添加http://dl.bintray.com/spark-packages/maven作为URL。然后只需按照步骤2和3进行操作即可。至于您的另一个问题,在zeppelin.dep.additionalRemoteRepository中拥有该URL是正常的。由于在步骤1中添加了外部存储库,因此现在可以解决此依赖项。 - Paul-Armand Verhaegen

4

BEGIN-EDIT

%dep在Zeppelin 0.6.0中已经被弃用,请参考Paul-Armand Verhaegen的答案。

如果您使用的是早于0.6.0版本的zeppelin,请继续阅读本答案。

END-EDIT

您可以使用%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中的“Dependency Loading”部分。

如果您已经初始化了Spark Context,快速解决方案是重新启动Zeppelin并先执行带有上述代码的Zeppelin段落,然后再执行您的Spark代码以读取CSV文件。


当我尝试这样做时,我得到了“错误:未找到值% %dep”。有什么想法吗? - fabsta
不是,但你使用的 Zeppelin 版本是什么?我刚刚从源码构建了它,一切正常。 - sag
1
正如Pete上面提到的:dep现在已经被弃用(0.6.1)...请参考Paul的答案(使用GUI)。 - conradlee
1
目前不应再将%dep视为已弃用。请参考Paul-Armand的答案了解原因。 - Paul-Armand Verhaegen

1
您可以在Spark解释器的依赖项下添加jar文件:
  1. 点击导航栏中的“解释器”菜单。
  2. 点击Spark解释器的“编辑”按钮。
  3. 填写工件和排除字段。
  4. 按“保存”按钮。

0
如果您在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


0
另一种解决方案:
在 conf/zeppelin-env.sh 中(对我来说位于 /etc/zeppelin),添加以下行:
export SPARK_SUBMIT_OPTIONS="--packages com.databricks:spark-csv_2.10:1.2.0"

然后启动服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接