【问题标题】:Zeppelin: What the best way to query data with SQL and work with it?Zeppelin:使用 SQL 查询数据并使用它的最佳方法是什么?
【发布时间】:2017-12-15 05:29:05
【问题描述】:

我想使用 Zeppelin 来查询数据库。我目前看到两种可能性,但对我来说都不够:

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

【问题讨论】:

    标签: python mysql sql apache-zeppelin


    【解决方案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 查询。你可以做同样的事情来获得我认为的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-28
        • 2012-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        • 1970-01-01
        相关资源
        最近更新 更多