问题标签 [ibis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
138 浏览

python - Ibis Python 帮助:ValueError:找到多个后端

我正在尝试使用 Ibis 将连接表转换为 python 数据框。我使用的两个表来自 bigquery,可以轻松地将它们转换为数据框。但是当我加入他们并调用 execute() 方法时,它给了我“ValueError: Multiple backends found”错误。

已经搜索了多种方法,但没有一个工作。这两个表也没有任何重叠的列名。

即使您无法猜测这里发生了什么,您至少能知道 Ibis 中何时发生此 Multiple Backend 错误吗?

0 投票
0 回答
670 浏览

python - 如何使用 Impala 和 Python 代码同时运行查询?

语境

我使用 Python (3.7) 在 Hadoop 服务器上运行多个查询。

经过多次测试,我认为 Impala 是查询数据库效率最高的引擎。所以我使用 Ibis 框架设置了一个连接,以强制使用 Impala(默认使用 Hive)。

考虑到查询的数量,我试图同时运行这些查询。

我想我已经接近了,但是在尝试使用 Ibis 共享与服务器的连接以及我启动的多个进程时,我遇到了一个问题。

我对 Python 很陌生,但我会尽我所能清楚地解释我的问题,并使用正确的词汇。如有任何错误,请提前原谅我......!

如何提交查询

对于提交我的查询,代码如下所示:

  • 连接到数据库:

hdfs = ibis.hdfs_connect(host='XXXX', port=Y) client = ibis.impala.connect(host='XXXX',port=Y,hdfs_client=hdfs)

  • 创建查询(多次完成):

查询=“选择...从...在哪里...”

  • 发送查询并检索结果(为每个查询完成):

查询 = self.client.sql(query) 数据 = query.execute(limit = None)

为同时运行这些查询所做的工作

现在,我已经使用多处理创建了一个 Process 类,并且我正在向它传递可以启用连接的客户端参数(至少,我认为),以及一个包含配置要运行的查询所需的信息的列表服务器:

然后,从主脚本中,我(尝试)建立连接,并使用此连接启动几个进程:

但是这段代码不起作用。我收到错误“TypeError:无法腌制 _thread.lock 对象”。

据我了解,这是因为多处理使用 Pickle 来“封装”参数,并将它们传输到进程(其内存在 Windows 上单独运行)。而且似乎不可能腌制“客户端”参数。

然后我在互联网上找到了几个试图解决这个问题的想法,但它们似乎都不适用于我的特殊情况(宜必思,黑斑羚......):

  • 我试图直接在 Process 对象的 run 方法中创建连接(这意味着每个进程一个连接):这导致“BrokenPipeError:[Errno 32] Broken pipe”

  • 我尝试使用multiprocessing.sharedctypes.RawValue,但如果这是正确的解决方案,我不太有信心在我的代码中正确实现它......

这几乎是我目前的情况。我将继续尝试解决这个问题,但作为 Python 的一种“新人”,以及数据库查询的多处理,我认为更高级的用户可能会帮助我!

预先感谢您花时间处理此请求!

0 投票
1 回答
928 浏览

python - 宜必思用 pandas 数据框创建 impala 表并得到 [错误 61] 连接被拒绝

执行 impyla sql 语句后,我将结果转换为 pandas 数据帧格式。但现在我想使用 Apache Ibis 在 impala 上自动创建一个临时表来创建表并将数据帧加载到其中。以下代码分为3个阶段:

  1. 阶段 1 使用用户定义的模式创建一个空表
  2. 阶段 2 创建一个表,该表的模式和数据来自另一个表
  3. 第 3 阶段是我想做的主要部分(假设给出了数据框)

错误代码如下所示。有谁知道这是怎么回事?因为配置是一样的,我不知道为什么在执行阶段3时会出现连接异常。

十分感谢 !

结果表明:

问候, XY.Ltw

0 投票
2 回答
140 浏览

pandas - 宜必思熊猫数据框连接

我们如何使用 ibis 和 pandas 数据框?

它抛出错误:

任何建议,将不胜感激

0 投票
0 回答
30 浏览

pandas - 转换为 Pandas DataFrame 时在 Ibis 中指定 datetime64 分辨率

我有一个 MySQL 数据库,它的日期时间值被任意移动以用于去识别目的。因此,例如,我的日期值为datetime.datetime(2644, 1, 17, 0, 0) . 如果我用 pymysql 或 Pandas 查询这些值,我会得到一个很好的 datetime 对象。但是,如果我使用 Ibis 构建查询,我会失败,因为日期超出了datetime64[ns]Ibis 在转换为 DataFrame 时使用的数据类型可以表示的数据范围。

所以

浏览 Ibis 源代码,似乎应该可以将 datetime64 时间单位从纳秒到微秒配置,以便日期在允许的范围内,但我无法弄清楚如何在 Ibis 中进行此配置。

任何建议将不胜感激。

0 投票
1 回答
43 浏览

python - 有没有办法使用 Ibis (impala) 遍历表行

我有一个相当大的 Ibis TableExpr,我想对其行进行迭代以生成专门的文件输出(FASTA 核苷酸序列)。有什么方法可以用 Ibis 做到这一点,还是我应该调用 execute 来创建一个可以调用 iterrows 的 pandas DataFrame?

我在API或教程中找不到任何内容。

0 投票
1 回答
55 浏览

python - 向日期列添加时间间隔

我将 ibis 与 bigquery 后端一起使用。

我想使用 .add() 方法为日期添加时间间隔。

但是我不知道如何指定这样的时间间隔:下面代码中的“which_type_here”变量。

谢谢你的帮助!

0 投票
1 回答
24 浏览

apache-spark - ibis ImpalaTable 到 pyspark 数据框

就我而言,我需要将 impala 数据加载到 spark(pyspark)。因为我想使用FPGrowthspark mllib。

数据在 kudu 中,它是由 impala 制作的。在spark上直接连接kudu被相关部门拒绝。而且我也无法连接cloudera制作的impala jdbc。
所以我最后的选择是

  1. 使用 ibis ( https://github.com/ibis-project/ibis )加载数据
  2. 转换ImpalaTable为火花Dataframe

但我找不到办法。
我想错了吗?

0 投票
1 回答
330 浏览

python-3.x - impala.error.HiveServer2Error:重试 3 次后失败

我使用 impyla 和 ibis 连接 hive 服务器,但我得到了错误。我尝试了以下代码:

新的错误出来了:

thrift 0.15.0 thrift-sasl 0.4.3 thriftpy2 0.4.14 pure-sasl 0.6.2 sasl 0.2.1 thrift-sasl 0.4.3 ibis-framework 2.0.0 impyla 0.17.0 python 版本:3.7.12 with anaconda

而且我试过ibis-1.3.0和2.0版本。你们可以给一些建议吗?很多

0 投票
0 回答
56 浏览

python - 使用 Ibis 连接到 CDP 上带有“日期”列的表(例外)

我正在使用 Ibis 连接到 Cloudera 数据平台系统上的表。对于一张桌子,我得到一个简单地说“日期”的例外。我可以毫无问题地访问其他表。我在 Hue 上检查了有问题的表格,发现一列具有“日期”类型。

有没有办法在宜必思使用这张桌子?

另一个讨论提到Hive 有 date 类型,但 Impala 没有,这可能是这里的问题。我正在寻找一种允许我继续使用 Ibis 并且不需要修改数据库的解决方案。我能够访问 pyodbc 中的表并使用 SQL 命令导出到 pandas 数据框。

详情如下:

我正在使用 Ibis 2.0,python 3.8(我对 Ibis 1.4 有同样的问题)

连接命令:

client = ibis.impala.connect(host=CDP_host,port=CDP_port,database=CDP_db,use_ssl=True,kerberos_service_name='impala',auth_mechanism="GSSAPI")

异常命令和消息:

client.table('pangolin') ------------------------------------------ --------------------------------- ----> 1 个客户端中的异常回溯(最后一次调用)。表('穿山甲')

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/base/sql/ init .py in table(self, name, database) 39 """ 40qualified_name = self._fully_qualified_name (name, database) ---> 41 schema = self.get_schema(qualified_name) 42 node = self.table_class(qualified_name, schema, self) 43 return self.table_expr_class(node)

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/impala/ init .py in get_schema(self, table_name, database) 488 489 个名称,类型 = zip(*pairs) - -> 490 ibis_types = [udf.parse_type(type.lower()) 用于输入类型] 491 名称 = [name.lower() 用于名称中的名称] 492

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/impala/ init .py in (.0) 488 489 个名称,类型 = zip(*pairs) --> 490 ibis_types = [udf.parse_type(type.lower()) 用于输入类型] 491 名称 = [name.lower() 用于名称中的名称] 492

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/impala/udf.py in parse_type(t) 340 return ValueError(t) 341 else: --> 342 raise Exception(电话:343 344

例外:日期

-------------------------------------------------- ------------------------- ----> 1 client.table('pangolin').columns 中的异常回溯(最近一次调用最后一次)

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/base/sql/ init .py in table(self, name, database) 39 """ 40qualified_name = self._fully_qualified_name (name, database) ---> 41 schema = self.get_schema(qualified_name) 42 node = self.table_class(qualified_name, schema, self) 43 return self.table_expr_class(node)

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/impala/ init .py in get_schema(self, table_name, database) 488 489 个名称,类型 = zip(*pairs) - -> 490 ibis_types = [udf.parse_type(type.lower()) 用于输入类型] 491 名称 = [name.lower() 用于名称中的名称] 492

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/impala/ init .py in (.0) 488 489 个名称,类型 = zip(*pairs) --> 490 ibis_types = [udf.parse_type(type.lower()) 用于输入类型] 491 名称 = [name.lower() 用于名称中的名称] 492

~/Software/miniconda3/envs/ibis38/lib/python3.8/site-packages/ibis/backends/impala/udf.py in parse_type(t) 340 return ValueError(t) 341 else: --> 342 raise Exception(电话:343 344

例外:日期