gpt4 book ai didi

R:来自 sqldf 的 read.csv.sql 能够成功读取一个 csv,但不能成功读取另一个 csv

转载 作者:行者123 更新时间:2023-12-02 10:51:00 25 4
gpt4 key购买 nike

我有一个大约 20GB 大的数据集,因此,我无法在不耗尽内存的情况下将其读入 R 数据帧。在阅读了这里的一些帖子后,我决定将 read.csv.sql 使用到数据库中。我使用的代码是:

read.csv.sql(
"jobs.csv",
sql = "CREATE TABLE Jobs2 AS SELECT * FROM file",
dbname = "Test1.sqlite"
)

当我运行以下命令时:

sqldf(
"select * from Jobs2",
dbname = "Test1.sqlite"
)

我得到了列的标题,但没有值:<0 行>(或 0 长度的行名称)

但是当我尝试使用 iris 数据集创建的 csv 进行相同操作时,一切正常。

我在这里缺少什么?

提前致谢。

最佳答案

sqldf 主要用于处理数据帧,因此它透明地创建数据库和数据库表,并在完成 sql 后删除它们。因此,您的第一条语句预计不会起作用,因为 sqldf 会在语句完成后删除数据库。

如果 SQL 创建数据库或表而不是 sqldf 本身,那么 sqldf 将不知道它,因此不会删除它。这里我们使用attach创建数据库,使用create table创建表来欺骗sqldf。在最后一行中,它不会删除数据库 oir 表,因为它们在该行开始之前就已经存在,并且永远不会删除它未创建的对象:

library(sqldf)

read.csv.sql("jobs.csv", sql = c("attach 'test1.sqlite' as new",
"create table new.jobs2 as select * from file"))
sqldf("select * from jobs2", dbname = "test1.sqlite")

另一个可能出错的地方是行结尾。通常 sqldf 可以计算出来,但如果不能,您可能必须指定 eol 字符。例如,如果您试图在另一个操作系统中读取在一个操作系统上创建的文件,则可能需要指定它。请参阅常见问题解答 11。为什么我在使用 SQLite 读取数据文件时遇到困难 in the sqldf README .

注意: read.csv.sql 通常用于读取部分数据。例如,这会跳过前 100 行,然后从接下来的 1000 行中读取列 ab,但查询可以任意复杂,因为您拥有 SQLite 的所有 SQL 来使用:

read.csv.sql("jobs.csv", sql = "select a, b from file limit 1000 offset 100")

整个文件被读入临时 sqlite 数据库,但只有请求的部分被读入 R,因此整个文件可能大于 R 可以处理的大小。

通常,如果试图实现持久性,则直接使用 RSQLite 而不是 sqldf。

关于R:来自 sqldf 的 read.csv.sql 能够成功读取一个 csv,但不能成功读取另一个 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com