我想要做的就是过度采样"一个小的csv文件,每行都有一个权重值列。
jQuery( document ).ajaxComplete(function() {
jQuery("a.button.product_type_simple.add_to_cart_button.ajax_add_to_cart.added" ).text("ADDED");
setTimeout(function(){ jQuery("a.button.product_type_simple.add_to_cart_button.ajax_add_to_cart.added" ).text("Add to bag");}, 5000)
});
到
Age|City|Weight
20 | NY |2
30 | SF |3
用panda和np我做了这个
Age|City|
20 | NY |
20 | NY |
30 | SF |
30 | SF |
30 | SF |
但它太慢了,它使用100%的1个CPU(15个可用)和所有65G内存超过24小时,最后崩溃。 最终文件应包含更多的7000万行。
所以我尝试使用Spark。
df = pd.read_csv('file.csv',low_memory=False)
weights=round(df.weight)
df.loc[np.repeat(df.index.values,weights)]
或类似的内容,加上rdd.map(lamba x: rdd.udf())
应该有所帮助,但我不明白如何做到正确。
最后,我需要将DataFrame或RDD保存在一个未分区的CSV中:一个可以和panda一起使用的csv。
谢谢!
答案 0 :(得分:1)
如果您可以在内存中加载数据并且计划在本地使用Pandas读取输出,则没有任何迹象表明您需要Spark。只需简单说明
import csv
with open("input.csv") as fr, open("output.csv", "w") as fw:
reader = csv.reader(fr)
writer = csv.writer(fw)
for age, city, weight in reader:
if age == "age":
writer.writerow((age, city))
else:
writer.writerows((age, city) for _ in range(int(weight)))
或列数较多(我假设权重是最后一列,根据实际数据的形状进行调整):
with open("input.csv") as fr, open("output.csv", "w") as fw:
reader = csv.reader(fr)
writer = csv.writer(fw)
for row:
if row[0] == "age":
writer.writerow(row[:-1])
else:
writer.writerows(row[:-1] for _ in range(int(row[-1])))
答案 1 :(得分:0)
好吧,我应该让它运行谢谢:
with open("file_in.csv",encoding='utf-8') as fr, open("file_out.csv", "w",encoding='utf-8') as fw:
reader = csv.reader(fr)
writer = csv.writer(fw)
for row in reader:
if row[0] == "firstColName" :
writer.writerow(row[:-1])
else:
writer.writerows(row[:-1] for _ in range(int(row[-1])))