Python 从文件读取连接行李时出现意外行为
我是Dask的新手,来自Apache Spark平台。 我试图在Dask中复制一个例程,在这里我每天加载JSON文件,并选择一些字段用于下游计算。 我发现for循环没有展开,因此在我的例子中,只有最后一次追加是有效的,这是文件数据的最后一天。我相信在append操作期间我需要某种形式的copy操作符来生成该数据帧的副本,但我无法从文档中找到任何信息。 我目前的解决方法是计算熊猫数据帧并附加它,这没问题,但我想知道是否有更好的方法Python 从文件读取连接行李时出现意外行为,python,dask,Python,Dask,我是Dask的新手,来自Apache Spark平台。 我试图在Dask中复制一个例程,在这里我每天加载JSON文件,并选择一些字段用于下游计算。 我发现for循环没有展开,因此在我的例子中,只有最后一次追加是有效的,这是文件数据的最后一天。我相信在append操作期间我需要某种形式的copy操作符来生成该数据帧的副本,但我无法从文档中找到任何信息。 我目前的解决方法是计算熊猫数据帧并附加它,这没问题,但我想知道是否有更好的方法 import dask import json import os
import dask
import json
import os
os.makedirs('demodata', exist_ok=True) # Create data/ directory
b = dask.datasets.make_people() # Make records of people
b.map(json.dumps).to_textfiles('demodata/*.json') # Encode as JSON, write to disk
dict_filter = lambda x, y: dict([ (i,x[i]) for i in x if i in set(y) ])
bags = []
for in_path in glob.glob('demodata/*.json'):
in_path = Path(in_path)
file_str = in_path.stem
print('Loading file %s' % file_str)
json_bag = db.read_text(in_path).map(json.loads)
filtered_bag = json_bag.map(lambda evt: dict_filter(evt, ['age','name']))
file_dict ={'filename':file_str}
file_bag = filtered_bag.map(lambda d: {**d,**file_dict} )
bags.append(file_bag)
all_bags = db.concat(bags)
all_people = all_bags.to_dataframe().compute()
assert all_people.filename.nunique() == 10
我想我们可以不用循环,通过使用关键字参数来解决这个问题 将dask.bag作为数据库导入 导入json 导入操作系统 只运行过一次,然后就没有了 进口达斯克 os.makedirsdemodata,exist\u ok=True创建数据/目录 b=dask.datasets.make_人员记录人员 b、 mapjson.dumps.to_textfilesdemdata/*.json编码为json,写入磁盘 get_keys=lambda d,keys:{key:d[key]如果key-in-keys} df= db.read\u textdemata/*.json,include\u path=True .maplambda x:{**json.loadsx[0],**dictfilename=os.path.basenamex[1]} .maplambda evt:get_keysevt[年龄、名称、文件名] .to_数据帧 计算 printdf 断言df.filename.nunique==10 打印出来
age name filename
0 50 [Chieko, Daniels] 0.json
1 52 [Irina, Tyson] 0.json
2 63 [Ali, O'connor] 0.json
3 47 [Doretta, Wiggins] 0.json
4 22 [Gregorio, Barnes] 0.json
.. ... ... ...
995 49 [Lory, Combs] 9.json
996 43 [Nicky, Mullen] 9.json
997 57 [Carolyne, Mendoza] 9.json
998 58 [Arthur, Monroe] 9.json
999 40 [Shin, Nunez] 9.json
这回答了你的问题吗?或者您是在寻找稍有不同的东西?如果您可以删除与gz无关的部分,过滤、更新并给出示例数据和预期输出,那将非常方便。我做的一件事是:更新不会返回任何内容。Ehy肯定会简化示例给我一天时间。@mdurant请查看更新的示例,可能是字典创建?您好,是的,这很有帮助,但我想了解为什么使用for循环DAG无法正确组合多个行李?在某些情况下,我仍然必须使用for循环,例如当存在gzip json文件时。我只是想了解更多的幕后情况。