【发布时间】: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