使用 spark-csv 在 zeppelin 中读取 csv 文件
Posted
技术标签:
【中文标题】使用 spark-csv 在 zeppelin 中读取 csv 文件【英文标题】:Reading csv files in zeppelin using spark-csv 【发布时间】:2016-01-03 04:39:56 【问题描述】:我想在 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 使用那个包呢?
提前致谢!
【问题讨论】:
zeppelin.incubator.apache.org/docs/interpreter/… 好的,添加:%dep --packages com.databricks:spark-csv_2.11:1.2.0 到一个齐柏林飞艇笔记本,但给出:“必须在初始化 SparkInterpreter (%spark) 之前使用” .但是没有在笔记本中使用 %spark %pyspark 或 %sql 怎么样? 不确定我是否理解。你能举个例子吗,@zero323? 您在笔记本中使用了%pyspark
还是%sql
?
【参考方案1】:
您需要先将 Spark Packages 存储库添加到 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")
或者,如果您希望在所有笔记本中都可以使用此功能,您可以在 Zeppelin 的解释器配置中将 --packages 选项添加到 spark-submit 命令设置,然后重新启动解释器。这应该启动一个已经按照 spark-shell 方法加载的包的上下文。
【讨论】:
%dep 现已弃用 (0.6.1)...见 Paul 的回答(使用 GUI) 是的。这应该在解释器配置中完成,如下 Paul 所述。 %dep 此时不应再被视为折旧。原因请参见 Paul-Armand 的回答。 不应使用此方法,因为使用此方法添加的 jar 不会分发给 spark executors。 @HarvinderSingh 你确定吗?这种方法确实将 jars 分发为它提交给 spark 的方式的一部分,这就是为什么这些注释必须在 spark 解释器之前运行(至少在我测试过的旧版本的 zeppelin 中)。也就是说,此处建议的其他方法为较新版本提供了更简洁的替代方案。【参考方案2】:-
转到解释器选项卡,单击存储库信息,添加一个存储库并将 URL 设置为http://dl.bintray.com/spark-packages/maven
向下滚动到 spark 解释器段落并单击编辑,向下滚动到工件字段并添加“com.databricks:spark-csv_2.10:1.2.0”或更新版本。然后在询问时重新启动解释器。
在笔记本中,使用如下内容:
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,因为它允许:
笔记本中的自记录库要求; 按注释(可能按用户)加载库。现在的趋势是保留 %dep,因此此时不应将其视为折旧。
【讨论】:
我不确定您所说的“创建回购”是什么意思。在我的 Zeppelin 解释器选项卡中,我可以创建一个全新的解释器环境。另外,我有针对字段zeppelin.dep.additionalRemoteRepository
的 Spark 包 URL,那么我应该如何让它加载 CSV 包?
@martin 通过单击“创建”按钮左侧的齿轮图标创建一个 repo(存储库)(用于创建一个全新的解释器环境,这不是您想要的)。这应该会展开可用的存储库列表,并显示一个“+”按钮。单击“+”按钮并将dl.bintray.com/spark-packages/maven 添加为 URL。然后,您可以按照步骤 2 和 3 进行操作。至于您的其他问题,在 zeppelin.dep.additionalRemoteRepository 中有该 URL 是正常的。由于在步骤 1 中添加了外部存储库,因此现在可以解决此依赖项。【参考方案3】:
开始编辑
%dep 在 Zeppelin 0.6.0 中已弃用。请参考 Paul-Armand Verhaegen 的回答。
如果您使用早于 0.6.0 的 zeppelin,请在此答案中进一步阅读
结束编辑
您可以使用 %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 文件
【讨论】:
当我尝试这样做时,我得到“错误:未找到:值 % %dep”。想法? 不,但是您使用的是什么版本的 zeppelin?我刚刚从源代码构建它,一切都很好 正如上面提到的皮特:dep 现在被贬低了(0.6.1)...见保罗的回答(使用 GUI) %dep 此时不应再被视为折旧。原因请参见 Paul-Armand 的回答。【参考方案4】:可以在 Spark Interpreter 依赖项下添加 jar 文件:
-
点击导航栏中的“解释器”菜单。
点击 Spark 解释器的“编辑”按钮。
填充工件并排除字段。
按“保存”
【讨论】:
【参考方案5】:如果你在 conf/zeppelin-env.sh 中定义
export SPARK_HOME=<PATH_TO_SPARK_DIST>
Zeppelin 然后会在 $SPARK_HOME/conf/spark-defaults.conf 中查找,您可以在那里定义 jar:
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 文件:/root/.ivy2/jars/com.databricks_spark-csv_2.10-1.4.0.jar,文件:/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
【讨论】:
【参考方案6】:另一种解决方案:
在 conf/zeppelin-env.sh(对我来说位于 /etc/zeppelin)中添加以下行:
export SPARK_SUBMIT_OPTIONS="--packages com.databricks:spark-csv_2.10:1.2.0"
然后启动服务。
【讨论】:
以上是关于使用 spark-csv 在 zeppelin 中读取 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何为 spark-csv 提供 parserLib 和 inferSchema 选项