小编aar*_*ers的帖子

以内存高效的方式从 python 中的流创建 Parquet 文件

在 Python 中创建 Parquet 文件的最常见方法似乎是首先创建 Pandas 数据框,然后使用 pyarrow 将表写入 Parquet。我担心这可能会导致内存使用量过大 - 因为它需要至少将数据集的一份完整副本存储在内存中才能创建 pandas 数据帧。

我想知道是否由于列压缩要求而需要将整个数据集加载到内存中,或者是否有更高效且基于流的方法。就我而言,我将以流媒体方式接收记录。对于类似的 csv 输出过程,我们以 1000 为批量将行写入磁盘,因此需要在内存中保存的行数永远不会达到完整数据集的大小。

我是不是该...?:

  1. 只需创建一个 pandas 数据框,然后将其写入镶木地板。(这意味着整个数据集需要存储在内存中,但我们将此视为必要要求。)
  2. 使用一些流友好的方式在我们收到它们时一次写入 1000 行左右,从而最大限度地减少整个过程中总的时间点 ram 消耗。(我没有看到任何有关如何执行此操作的文档,而且我不确定它是否是镶木地板的选项。)
  3. 将所有内容写入 CSV,然后使用智能读取/分析 CSV 内容并在事后创建压缩镶木地板的函数。(运行时间可能较慢,但内存配置文件较低,并且在非常大的文件上失败的机会较低。)

想法?建议?

python parquet fastparquet pyarrow

10
推荐指数
1
解决办法
5740
查看次数

使用描述符进行类型提示

这个拉取请求中,似乎添加了对描述符的类型提示支持。

但是,似乎从未发布过最终的“正确”使用示例,也似乎从未将任何文档添加到typing模块Mypy 中

看起来像的正确用法是像这样

from typing import TypeVar

T = TypeVar('T')
V = TypeVar('V')


class classproperty():
    def __init__(self, getter: Callable[[Type[T]], V]) -> None:
        self.getter = getter

    def __get__(self, instance: Optional[T], owner: Type[T]) -> V:
        return self.getter(owner)


def forty_two(cls: Type) -> int:
    return 42


class C:
    forty_two: int = classproperty(forty_two)
Run Code Online (Sandbox Code Playgroud)

这似乎合乎逻辑,但我不知道这是否真的是正确的做事方式。

有没有这方面的文件?或者实际适用于合并版本的完整示例?

python type-hinting python-3.x python-descriptors mypy

8
推荐指数
1
解决办法
1145
查看次数

有没有Spark SQL jdbc驱动程序?

我正在寻找支持Spark SQL的客户端jdbc驱动程序.

到目前为止,我一直在使用Jupyter在Spark上运行SQL语句(在HDInsight上运行),我希望能够使用JDBC进行连接,以便我可以使用第三方SQL客户端(例如SQuirreL,SQL Explorer等)代替的笔记本界面.

我找到了一个来自Microsoft的ODBC驱动程序,但这对基于java的SQL客户端没有帮助.我也尝试从我的集群中下载Hive jdbc驱动程序,但是Hive JDBC驱动程序似乎不支持Spark所做的更高级的SQL功能.例如,Hive驱动程序抱怨不支持不是equajoins的join语句,我知道这是Spark支持的功能,因为我已成功在Jupyter中执行了相同的SQL.

jdbc hdinsight apache-spark apache-spark-sql

7
推荐指数
1
解决办法
7026
查看次数

使用 dbt 和 Meltano,如何防止多个 dbt 作业运行相互冲突?

在 Meltano 中运行 dbt 作业时,dbt run如果超出触发上下文,作业可能会相互冲突 - 例如,当按需作业与计划作业或基于 CI 的作业发生冲突时。

如果dbt run同时对同一个表进行操作,如果对单个目标表执行两次相同的插入,通常会导致崩溃,有时还会导致数据质量问题。

有什么方法可以使用 Meltano 功能或本机 dbt 功能来防止运行冲突?

dbt meltano

7
推荐指数
1
解决办法
1537
查看次数

GitHub 操作简单地将文件转换为输出

我想将cat我的 VERSION 文件(例如0.9.0)的内容转换为一个变量并将其作为输入传递给另一个 GitHub 操作。但是,据我所知,这需要创建一个新的 GitHub 操作来将文件转换为“输出”,然后可以将其用作input下一个模块。

是否有一个 GitHub 操作已经这样做了 - 或者我缺少一些更简单的解决方案?

github-actions

6
推荐指数
2
解决办法
2049
查看次数

如何在 Meltano 中覆盖流的主键属性或增量复制键?

有时我们想要覆盖流的关键属性(主键)或其增量复制键。在 Meltano 执行此操作的最佳方法是什么?

singer-io meltano

6
推荐指数
1
解决办法
1368
查看次数

在不使用 Terraform 文件配置程序的情况下将本地文件部署到实例

与其他几位发布到 StackOverflow 的用户一样,我遇到了文件配置程序的问题,Terraform 文档说我们不应该依赖它们。

解决文件配置程序(特别是本地配置文件和脚本)的最佳方法是什么?

terraform terraform-provider-aws

5
推荐指数
1
解决办法
2156
查看次数

如何给 Github Action 一个文件的内容作为输入?

我有一个工作流程,其中包含在构建和人工制品时创建版本号的操作。这个版本号被写入文件。

我怎样才能把它作为另一个动作的输入?

即:如何在另一个操作中使用此版本号作为提交消息的一部分?

github github-actions

1
推荐指数
2
解决办法
1891
查看次数