【问题标题】:Any Faster Alternative for Pandas Data Frame for HIVE Queries?用于 HIVE 查询的 Pandas 数据框有更快的替代方案吗?
【发布时间】:2022-01-06 08:24:16
【问题描述】:

我在 hive 上使用以下查询

cur.execute('select * from table_name)

并将数据放入 pandas 数据框

output_dataframe = pd.DataFrame(cur.fetchall(),columns=colname)

我运行的表通常具有从 100 万到超过 8000 万的行/条目记录,并且代码对于较小的表工作正常,但我的大部分运行时间都用于这一步“output_dataframe = pd.DataFrame( cur.fetchall(),columns=colname)"

对于较大的表(超过 4-5 百万个条目),代码会卡住或花费数小时

在我的情况下,有没有更好的选择来改善运行时间?

【问题讨论】:

    标签: python pandas dataframe hive


    【解决方案1】:

    您可以查看 Dask,它基于 Pandas 构建并处理分区中的大数据。尝试将您的查询分成几部分,以便您可以将数据的不同部分分配给每个 dask 工作人员。您可以像这样基于 HIVE 中的索引列进行一组查询(所有功劳归于Using dask to read data from Hive):

    queries = [SQL_STATEMENT.format(i) for i in range(10)]
    def query_to_df(query):
        cursor = impyla.execute(query)
        return pd.DataFrame.from_records(cursor.fetchall())
    

    然后像这样使用构造 Dask 数据帧:

    parts = [dask.delayed(query_to_df)(q) for q in queries]
    df = dd.from_delayed(parts)
    

    Dask 文档非常清晰,请查看:https://docs.dask.org/en/stable/delayed.html

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 2014-07-19
      • 2022-01-25
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多