【问题标题】:Python - unable to read a large filePython - 无法读取大文件
【发布时间】:2020-03-02 14:35:48
【问题描述】:

如何从 jupyter-notebook 中的 hdfs 读取大表作为 pandas DataFrame? 该脚本通过 docker 镜像启动。

库:

  • sasl==0.2.1
  • 节俭==0.11.0
  • thrift-sasl==0.4a1
  • Impyla==0.16.2
from impala.dbapi import connect 
from impala.util import as_pandas

impala_conn = connect(host='hostname', port=21050,
auth_mechanism='GSSAPI', 
                      timeout=100000, use_ssl=True, ca_cert=None, 
                      ldap_user=None, ldap_password=None, 
                      kerberos_service_name='impala')

这行得通。


import pandas as pd
df = pd.read_sql("select id, crt_mnemo from demo_db.stg_deals_opn LIMIT 100", impala_conn)
print(df)

这不起作用。操作挂起,不报错。


import pandas as pd
df = pd.read_sql("select id, crt_mnemo from demo_db.stg_deals_opn LIMIT 1000", impala_conn)
print(df)

【问题讨论】:

  • 你的代码是一样的吗?为什么用 impala+pandas 而不是 pyspark?
  • @cricket_007 我为什么要撒谎呢? pyspark中的to_pandas方法只输出10000行,并抛出错误。
  • 哦,对不起,我错过了不同的限制。嗯,嗯,可能是内存问题。究竟是什么错误?你的 Spark 代码是什么样的?
  • @cricket_007 感谢您的帮助。火花代码:pdf = sqlContext.sql("""table name""").toPandas() print(pdf)。错误:Py4JJavaError: An error occurred while calling o121.collectToPython. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 2 in stage 5.0 failed 4 times, most recent failure: Lost task 2.3 in stage 5.0 (TID 20, hadoop server, executor 1): TaskResultLost (result lost from block manager) Driver stacktrace
  • 好吧,很明显,一旦您使用toPandas,您就会将所有数据带到一台机器上,这违背了 Spark 的目的......如果您只想打印数据框,那就是 @987654327 @。您应该将任何 pandas 操作转换为 Spark

标签: python pandas hadoop impyla


【解决方案1】:

这似乎是您可以使用 pandas read_sql 函数从 impala 移动的行数的问题。我有同样的问题,但限制比你的低。您可能需要联系数据库管理员来检查大小。 以下是其他选项:https://docs.cloudera.com/machine-learning/cloud/import-data/topics/ml-running-queries-on-impala-tables.html

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2016-09-04
    • 2017-09-15
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多