Zeppelin:使用 SQL 查询数据并使用它的最佳方法是啥?
Posted
技术标签:
【中文标题】Zeppelin:使用 SQL 查询数据并使用它的最佳方法是啥?【英文标题】:Zeppelin: What the best way to query data with SQL and work with it?Zeppelin:使用 SQL 查询数据并使用它的最佳方法是什么? 【发布时间】:2017-12-15 05:29:05 【问题描述】:我想使用 Zeppelin 来查询数据库。我目前看到两种可能性,但对我来说都不够:
-
将数据库连接配置为“解释器”,将其命名为例如“sql1”,在段落中使用它,运行 sql 查询并使用内置的漂亮绘图工具。似乎所有的教程和技巧都在处理它,但是文档突然停止了!但我想对数据做更多的事情:我想过滤和处理。如果我想再次绘制它(有其他限制),我必须再次进行查询(可能会持续几秒钟或几分钟)(请参阅我的另一个问题Zeppelin SQL: reuse data of query without another interpreter or a new query)
将 spark 与 python、scala 或类似工具一起使用。但文档似乎只加载 csv 数据,放入数据帧,然后使用 sql 访问该数据帧。首先没有使用 sql 访问数据。如何以最佳方式访问 sql 数据?我可以使用已配置的“解释器”(数据库连接)吗?
【问题讨论】:
【参考方案1】:我找不到 1 的解决方案。但我已经为 2 制定了一个简短的解决方案。它可以在 zeppelin 中使用 python (2.7)、sqlalchemy (sql wrapper)、mysqldb (mysql implementation) 和 pandas (确保有这些已安装的软件包,它们都在 Debian 9 中)。我想知道为什么我以前没有找到这样的解决方案...
%python
from sqlalchemy import create_engine
import pandas as pd
sql = "select col1, col2 from table limit 10"
df = pd.read_sql(sql,
create_engine('mysql+mysqldb://user:password@host:3306/database').connect())
z.show(df)
如果你想连接到另一个数据库,比如 db2 或 oracle,你必须使用其他 python 包并调整 create_engine 字符串中的第一部分。
【讨论】:
【参考方案2】:您可以使用 Zeppelin API 来检索段落数据:
val buffer = scala.io.Source.fromURL("http://XXXXX:9995/api/notebook/2CN2QP93H/paragraph/20170713-092810_1633770798").mkString
val df = sqlContext.read.json(sc.parallelize(buffer :: Nil)).select("body.text")
df.first.getAs[String](0)
此 Spark Scala 行将检索 paragprah 使用的 SQL 查询。你可以做同样的事情来获得我认为的结果。
【讨论】:
以上是关于Zeppelin:使用 SQL 查询数据并使用它的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 Zeppelin 与外部 javascript 工具一起使用,例如 plotly
保存/导出 Spark SQL Zeppelin 查询的结果