问题标签 [intake]
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 - 如何使用 dask 有效地聚合大量小型 csv 文件(每个 120kb 约 50k 个文件)(代码大小、调度程序+集群运行时)?
我有一个数据集,每个文件包含一个时间序列。我真的很高兴 dask 如何处理我们集群上的 ~1k 文件(在我的例子中是一个目录)。但我有大约 50 个目录。
发生的有趣的事情是,构建 dask 图似乎比实际问题消耗更多的内存和 CPU。这仅在调度程序上。以下最低限度的代码应该只创建图表,但似乎已经在调度程序上做了很多熊猫的东西:
注意:我在这里的模式使用摄入量。我也一直在使用read_csv
from dask with include_path_column=True
and path
as group。我设法使上述步骤更快,但随后features.compute()
似乎有效地扩展了导致相同情况的图表,即调度程序在集群开始运行之前挂起。
最简单的方法是实际使用 dask 反模式并执行循环。但是我想知道,是否可以做得更好(这是出于教育目的,所以风格和简单性很重要)
有没有一种很好的方法可以在一个图形中读取许多文件,而不会使图形大小超出线性范围。
intake - 如何使用 Intake 打开 json 文件?
我正在尝试使用intake
为 JSON 文件创建数据目录。 #197json.loads
提到“基本上,如果您的每个文件都是一个评估为对象列表的 JSON 块,则您需要提供阅读器功能。”
我创建了一个test.json
并且(使用 Intake复制数据工程)尝试
将输出保存到source.yaml
并尝试打开它
这产生了:
我不知道如何解决这个问题,非常感谢任何提示!
python - 在 Dask 中使用 read_csv 进行列名移位
我正在尝试使用Intake对 csv 数据集进行编目。它使用 Dask 实现,read_csv
而后者又使用 pandas 实现。
我看到的问题是我正在加载的 csv 文件没有索引列,因此 Dask 将第一列解释为索引,然后将列名向右移动。
日期时间 (dt) 列应该是第一列,但是当读取 csv 时,它被解释为索引并且列名被移动,因此从它们的正确位置偏移。我将列names
列表和dtypes
字典提供给 read_csv 调用。
据我所知,如果我使用的是 pandas,我会提供index_col=False
kwarg 来修复,如图所示,但 Dask 返回一个故意错误,说明:Keywords 'index' and 'index_col' not supported. Use dd.read_csv(...).set_index('my-index') instead
. 这似乎是由于并行化限制。
建议的修复(使用set_index('my-index)
)在这种情况下无效,因为它希望读取整个文件,同时还具有列名来设置索引。主要问题是,如果名称偏移,我无法准确设置索引列。
在 Dask 中,加载没有明确具有索引列的 csv 以使解释的索引列至少保留指定的列名的最佳方法是什么?
更多信息:
我正在使用的游戏数据集:https ://www.kaggle.com/NUFORC/ufo-sightings?select=scrubbed.csv
我使用的 Intake catalog.yml 文件如下:
我正在使用以下内容加载目录和相应的数据集:
这将导致读取上面显示的数据帧和该数据的 csv 副本:
与原始/原始数据 csv(无前导逗号)相比:
Dask 调用:
python - 谷歌 colab 中的“导入摄入”会生成 ContextualVersionConflict
在google colab中安装最新版本的intake-esm(2020.12.18)
但该import intake
语句会产生以下错误:
谁能告诉我出了什么问题或如何解决这个问题?
pyarrow - Apache Arrow 还是羽毛插件?
我想使用本地羽毛文件作为 Intake 的来源。羽毛/箭头的插件还不存在还是我遗漏了什么?
python - 将参数添加到 Python Intake LocalCatalogEntry
我正在尝试LocalCatalogEntry
为 Python 的 Intake 包构建一个(作为更大目录的一部分,它可能有多个条目,我正在尝试在此处创建其中一个)。但是,我似乎无法弄清楚如何向它提供用户参数来描述组变量名称(来自 hdf5 文件中)而不会出现错误。
结果是AttributeError: 'dict' object has no attribute 'describe'
. 我已经尝试了各种排列并挖掘了源代码/文档,但无法弄清楚我应该如何输入这些信息才能使其成为有效输入。我是否尝试错误地输入用户参数?
python - 摄入量:目录级参数
我在这里阅读“参数” ,想知道我是否可以定义目录级别的参数,以便以后在目录源的定义中使用?
考虑一个简单的 YAML 目录,它有两个来源:
请注意,两个数据源(data1 和 data2)都使用snapshot_date
参数内的urlpath
参数?有了这个定义,我可以加载数据源:
请注意,这cat.data1().read()
不起作用,因为snapshot_date
默认为空字符串,因此 csv 驱动程序找不到路径“./data//data1.csv”。
我可以通过向每个(!)源添加部分来设置默认值,parameters
如下所示。
但这看起来很复杂(太多重复的代码)并且对最终用户来说有点不方便——如果用户想要从给定日期加载所有数据源,他必须snapshot_date
在初始化时显式地为每个(!)数据源提供参数。IMO,如果我用户可以在初始化目录时提供一次这个值,那就太好了。
有没有办法可以snapshot_date
在目录级别定义参数?以便:
- 我可以在目录参数的 YAML 定义中设置默认值(例如,在我的示例中为“最新”)
- 或者可以在调用期间在运行时传递目录的参数值
intake.open_catalog("./catalog.yaml", snapshot_date="20211029")
- 在该目录的数据源定义中应该可以访问该值吗?
提前致谢
python - 划分摄入数据源
我有一个大型的日常文件数据集,位于/some/data/{YYYYMMDD}.parquet
(或者也可以是 smth like /some/data/{YYYY}/{MM}/{YYYYMMDD}.parquet
)。
我在 mycat.yaml 文件中描述数据源如下:
我希望能够将文件子集(分区)读入内存,
如果我跑, source = intake.open_catalog('mycat.yaml').source_partitioned; print(source.npartitions)
我会得到0
. 可能是因为分区信息还没有初始化。之后source.discover()
,source.npartitions
更新为1726
磁盘上单个文件的数量。
我将如何加载数据:
- 仅针对给定的一天(例如 20180101)
- 持续几天(例如 20170601 和 20190223 之间)?
如果这在 wiki 上的某处有所描述,请随时将我指向相应的部分。
注意:在考虑了更多之后,我意识到这可能与 dask 的功能有关,并且我的目标可能可以通过使用方法将源转换为 dask_dataframe 以某种方式实现.to_dask
。因此dask
在这个问题上贴上标签。
python - Snakefile 的 config.yaml 中的相对路径
如何在我的配置文件中使用相对路径,以便用户无需更改USER
输出目录的路径?
我有这个:
配置.yml
蛇文件
但想做这样的事情:
或这个:
但是我尝试过的方法都没有奏效。