Zeppelin:使用 SQL 查询数据并使用它的最佳方式是什么?

Zeppelin: What the best way to query data with SQL and work with it?

我想用 Zeppelin 查询数据库。我目前看到两种可能性,但其中 none 对我来说已经足够了:

  1. 将数据库连接配置为 "interpreter",将其命名为例如"sql1",在段落中使用它,运行 sql 查询并使用内置的漂亮绘图工具。似乎所有的教程和技巧都涉及到它,但随后文档突然停止了!但我想对数据做更多的事情:我想过滤和处理。如果我想再次绘制它(有其他限制),我必须再次进行查询(可能持续几秒钟或几分钟)(参见我的其他问题 Zeppelin SQL: reuse data of query without another interpreter or a new query
  2. 将 spark 与 python、scala 或类似工具一起使用。但是文档似乎只加载 csv 数据,放入数据框,然后使用 sql 访问该数据框。首先无法使用 sql 访问数据。如何以最佳方式访问 sql 数据?我可以使用已配置的 "interpreter"(数据库连接)吗?

我找不到 1 的解决方案。但是我为 2 做了一个简短的解决方案。它在 zeppelin 中与 python (2.7)、sqlalchemy (sql wrapper )、mysqldb(mysql 实现)和 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 字符串中的第一部分。

您可以使用 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 查询。你可以做同样的事情来获得我认为的结果。