问题标签 [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.
python - Ibis Python 帮助:ValueError:找到多个后端
我正在尝试使用 Ibis 将连接表转换为 python 数据框。我使用的两个表来自 bigquery,可以轻松地将它们转换为数据框。但是当我加入他们并调用 execute() 方法时,它给了我“ValueError: Multiple backends found”错误。
已经搜索了多种方法,但没有一个工作。这两个表也没有任何重叠的列名。
即使您无法猜测这里发生了什么,您至少能知道 Ibis 中何时发生此 Multiple Backend 错误吗?
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 的一种“新人”,以及数据库查询的多处理,我认为更高级的用户可能会帮助我!
预先感谢您花时间处理此请求!
python - 宜必思用 pandas 数据框创建 impala 表并得到 [错误 61] 连接被拒绝
执行 impyla sql 语句后,我将结果转换为 pandas 数据帧格式。但现在我想使用 Apache Ibis 在 impala 上自动创建一个临时表来创建表并将数据帧加载到其中。以下代码分为3个阶段:
- 阶段 1 使用用户定义的模式创建一个空表
- 阶段 2 创建一个表,该表的模式和数据来自另一个表
- 第 3 阶段是我想做的主要部分(假设给出了数据框)
错误代码如下所示。有谁知道这是怎么回事?因为配置是一样的,我不知道为什么在执行阶段3时会出现连接异常。
十分感谢 !
结果表明:
问候, XY.Ltw
pandas - 宜必思熊猫数据框连接
我们如何使用 ibis 和 pandas 数据框?
它抛出错误:
任何建议,将不胜感激
pandas - 转换为 Pandas DataFrame 时在 Ibis 中指定 datetime64 分辨率
我有一个 MySQL 数据库,它的日期时间值被任意移动以用于去识别目的。因此,例如,我的日期值为datetime.datetime(2644, 1, 17, 0, 0)
. 如果我用 pymysql 或 Pandas 查询这些值,我会得到一个很好的 datetime 对象。但是,如果我使用 Ibis 构建查询,我会失败,因为日期超出了datetime64[ns]
Ibis 在转换为 DataFrame 时使用的数据类型可以表示的数据范围。
所以
浏览 Ibis 源代码,似乎应该可以将 datetime64 时间单位从纳秒到微秒配置,以便日期在允许的范围内,但我无法弄清楚如何在 Ibis 中进行此配置。
任何建议将不胜感激。
python - 有没有办法使用 Ibis (impala) 遍历表行
我有一个相当大的 Ibis TableExpr,我想对其行进行迭代以生成专门的文件输出(FASTA 核苷酸序列)。有什么方法可以用 Ibis 做到这一点,还是我应该调用 execute 来创建一个可以调用 iterrows 的 pandas DataFrame?
我在API或教程中找不到任何内容。
python - 向日期列添加时间间隔
我将 ibis 与 bigquery 后端一起使用。
我想使用 .add() 方法为日期添加时间间隔。
但是我不知道如何指定这样的时间间隔:下面代码中的“which_type_here”变量。
谢谢你的帮助!
apache-spark - ibis ImpalaTable 到 pyspark 数据框
就我而言,我需要将 impala 数据加载到 spark(pyspark)。因为我想使用FPGrowth
spark mllib。
数据在 kudu 中,它是由 impala 制作的。在spark上直接连接kudu被相关部门拒绝。而且我也无法连接cloudera制作的impala jdbc。
所以我最后的选择是
- 使用 ibis ( https://github.com/ibis-project/ibis )加载数据
- 转换
ImpalaTable
为火花Dataframe
但我找不到办法。
我想错了吗?
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版本。你们可以给一些建议吗?很多
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
例外:日期