Dataframe 无法筛选从箭头表创建的数据帧

Dataframe 无法筛选从箭头表创建的数据帧,dataframe,julia,apache-arrow,Dataframe,Julia,Apache Arrow,我在julia中具有以下功能,可以读取Arrow文件(使用Arrow.jl)从磁盘读取数据并对其进行处理: function getmembershipsdays(fromId, toId) memberships = Arrow.Table("HouseholdMemberships.arrow") |> DataFrame filter!([:IndividualId] => id -> id >= fromId && id

我在julia中具有以下功能,可以读取Arrow文件(使用Arrow.jl)从磁盘读取数据并对其进行处理:

function getmembershipsdays(fromId, toId)
  memberships = Arrow.Table("HouseholdMemberships.arrow") |> DataFrame
  filter!([:IndividualId] => id -> id >= fromId && id <= toId, memberships)
  ...
end

> Error: ERROR: LoadError: MethodError: no method matching
> deleteat!(::Arrow.Primitive{Int64,Array{Int64,1}}, ::Array{Int64,1})

The DataFrame has the following structure:
123226x10 DataFrame
Row | MembershipId | IndividualId | HouseholdId | ...
    | Int64        | Int64        | Int64       |
函数getMembershipDays(fromId,toId)
memberships=Arrow.Table(“HouseholdMemberships.Arrow”)|>DataFrame
过滤器!([:IndividualId]=>id->id>=fromId&&id错误:错误:LoadError:MethodError:没有方法匹配
>deleteat!(::Arrow.Primitive{Int64,Array{Int64,1}},::Array{Int64,1})
数据帧具有以下结构:
123226x10数据帧
行|会员ID |个人ID |户主ID |。。。
|Int64 | Int64 | Int64|
函数中用于单步执行Dataframe的其余代码正常工作,但如果添加筛选条件,则会出现此错误。这就好像Dataframe列未转换为基础类型一样

如果我这样做

m = filter([:IndividualId] => id -> id >= fromId && id <= toId, memberships)

m=filter([:IndividualId]=>id->id>=fromId&&id您正在使用内存映射,这意味着您无法调整从Arrow.jl源创建的
数据帧的大小。这是您必须为从Arrow源快速零拷贝创建数据帧而支付的成本

为什么它是这样设计的

  • 通常,您只读取数据帧(而不修改它们)——在这种情况下,您可能希望节省复制数据的成本(特别是对于非常大的数据集)
  • 在DataFrames.jl中使用复制功能来执行复制非常简单(例如,在您的示例中,将
    过滤器!
    替换为
    过滤器
  • 有关更多示例,请参阅(特别是-如何避免使用
    IO
    source而不是文件名作为源进行内存映射)

    注意,
    id>=fromId&&id