الطريقة الأكثر فعالية لتصدير البيانات الكبيرة (3.9 مطحنة أوبس).إطارات لملف نصي?[مكررة]

StackOverflow https://stackoverflow.com//questions/9703068

  •  13-12-2019
  •  | 
  •  

سؤال

لدي داتافريم كبيرة إلى حد ما في ص التي أود أن تصدير إلى سبس.وقد تسبب هذا الملف لي ساعات من الصداع في محاولة لاستيراده إلى ص في المقام الأول ، ولكن حصلت على النجاح باستخدام read.fwf() باستخدام الخيارات comment.char="%" (حرف لا يظهر في الملف) و fill= TRUE(كان ملف أسي عرض ثابت مع بعض الصفوف تفتقر إلى جميع المتغيرات ، مما تسبب في رسائل الخطأ).

على أي حال ، يتكون إطار البيانات الخاص بي حاليا من 3,9 ملاحظات مطحنة و 48 متغيرا (كل الأحرف).أستطيع أن أكتب إلى ملف بسرعة إلى حد ما عن طريق تقسيمه إلى 4 س 1 مطحنة أوبس مجموعات مع df2 <- df[1:1000000,] تليها write.table(df2) الخ.، ولكن لا يمكن كتابة الملف بأكمله في عملية مسح واحدة دون قفل الكمبيوتر والحاجة إلى إعادة تعيين ثابت للنسخ الاحتياطي.

بعد سماع القصص القصصية حول مدى عدم ملاءمة ص لمجموعات البيانات الكبيرة لسنوات ، هذه هي المرة الأولى التي أواجه فيها بالفعل مشكلة من هذا النوع.وأتساءل عما إذا كانت هناك أساليب أخرى (على مستوى منخفض" الإغراق " الملف مباشرة إلى القرص?) أو ما إذا كان هناك بعض حزمة غير معروف بالنسبة لي التي يمكن التعامل مع تصدير الملفات الكبيرة من هذا النوع بكفاءة?

هل كانت مفيدة؟

المحلول

في تخمين ، الجهاز الخاص بك هو قصيرة على ذاكرة الوصول العشوائي ، وحتى ص هو الحاجة إلى استخدام ملف المبادلة،مما يبطئ الأمور.إذا تم الدفع لك مقابل الكود ، فمن المحتمل أن يكون شراء المزيد من ذاكرة الوصول العشوائي أرخص من كتابة رمز جديد.

ومع ذلك ، هناك بعض الاحتمالات.يمكنك تصدير الملف إلى قاعدة بيانات ثم استخدام مرفق قاعدة البيانات هذه للكتابة إلى ملف نصي.جواب دينار طويل ل هذا السؤال يخبرك كيف تقرأ في الملفات بهذه الطريقة;لا ينبغي أن يكون من الصعب للغاية عكس العملية.بدلا من ذلك bigmemory و ff يمكن استخدام الحزم (كما ذكر ديفي) لكتابة مثل هذه الملفات.

نصائح أخرى

1) إذا كان الملف الخاص بك هو كل سلاسل الأحرف ، فإنه يحفظ باستخدام write.table() أسرع بكثير إذا قمت بتغييره لأول مرة إلى matrix.

2) اكتبها أيضا في أجزاء من ، قل 1000000 صف ، ولكن دائما إلى نفس الملف ، واستخدام الوسيطة append = TRUE.

تحديث

بعد عمل مكثف من قبل مات دول الموازاة وإضافة تحسينات الكفاءة الأخرى, fread الآن أسرع بمقدار 15 ضعفا من write.csv.انظر الإجابة المرتبطة للمزيد.


الآن data.table لديه fwrite الوظيفة التي ساهم بها أوتو سيسكاري والتي يبدو أنها أسرع بمرتين write.csv بشكل عام.انظر هنا لبعض المعايير.

library(data.table) 
fwrite(DF, "output.csv")

لاحظ أنه يتم استبعاد أسماء الصفوف ، نظرا لأن data.table النوع لا يستفيد منها.

على الرغم من أنني فقط استخدامه لقراءة ملفات كبيرة جدا( 10 + غيغابايت) وأعتقد أن ff حزمة لديها وظائف لكتابة دفس كبيرة للغاية.

حسنا ، كما الجواب مع ملفات كبيرة حقا و ص في كثير من الأحيان هو ، قصارى جهدها لتفريغ هذا النوع من العمل إلى قاعدة بيانات.سبس لديها اتصال أودبك ، و RODBC يوفر واجهة من ص إلى سكل.

ألاحظ, أنه في عملية التحقق من معلوماتي, لقد تم حصد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top