আমি নতুন arrow
প্যাকেজটি ব্যবহার করে খুব দ্রুত ডেটা পড়ছি । এটি মোটামুটি প্রাথমিক পর্যায়ে উপস্থিত রয়েছে।
বিশেষত, আমি parquet কলামার ফর্ম্যাট ব্যবহার করছি । এটি data.frame
আর- তে ফিরে আসে , তবে আপনি যদি না করেন তবে আরও গভীর স্পিডআপগুলি পেতে পারেন। এই ফর্ম্যাটটি সুবিধাজনক কারণ এটি পাইথন থেকেও ব্যবহার করা যেতে পারে।
এর জন্য আমার প্রধান ব্যবহারের ক্ষেত্রেটি মোটামুটি সংযত আরএসআইইন সার্ভারে। এই কারণে, আমি অ্যাপ্লিকেশনগুলিতে ডেটা সংযুক্ত রাখতে পছন্দ করি (অর্থাত্ এসকিউএল এর বাইরে), এবং সেইজন্য ছোট ফাইলের আকারের পাশাপাশি গতিও প্রয়োজন।
এই লিঙ্কযুক্ত নিবন্ধটি মানদণ্ড এবং একটি ভাল ওভারভিউ সরবরাহ করে। আমি নীচে কিছু আকর্ষণীয় পয়েন্ট উদ্ধৃত করেছি।
https://ursalabs.org/blog/2019-10-columnar-perf/
ফাইলের আকার
অর্থাৎ পারকুইট ফাইলটি জিপিড সিএসভি এমনকি অর্ধেক বড়। পারকুইট ফাইলটি এত ছোট হওয়ার একটি কারণ অভিধান-এনকোডিং (এটি "অভিধান সংক্ষেপণ" নামেও পরিচিত)। অভিধান সংক্ষেপণ এলজেড 4 বা জেডএসটিডি (যা এফএসটি ফর্ম্যাটে ব্যবহৃত হয়) এর মতো একটি সাধারণ উদ্দেশ্য বাইট কম্প্রেসর ব্যবহার করার চেয়ে যথেষ্ট উন্নত সংক্ষেপণ পেতে পারে। পরকুইট খুব ছোট ফাইলগুলি পড়ার জন্য দ্রুত তৈরি করার জন্য ডিজাইন করা হয়েছিল।
গতি পড়ুন
আউটপুট টাইপ দ্বারা নিয়ন্ত্রণ করার সময় (যেমন সমস্ত আর ডেটা ফ্রেম আউটপুট একে অপরের সাথে তুলনা করে) আমরা পারকুইট, ফেদার এবং এফএসটি এর পারফরম্যান্স একে অপরের অপেক্ষাকৃত ছোট ব্যবধানের মধ্যে দেখতে পাই। প্যান্ডাসের ক্ষেত্রেও একই কথা রয়েছে ata ডেটা ফ্রেমের আউটপুট। ডেটা.টিবেল :: ফ্রেড 1.5 গিগাবাইট ফাইলের আকারের সাথে চিত্তাকর্ষকভাবে প্রতিযোগিতামূলক তবে 2.5 জিবি সিএসভিতে অন্যকে পিছনে ফেলেছে।
স্বতন্ত্র পরীক্ষা
আমি 1,000,000 সারিগুলির সিমুলেটেড ডেটাসেটে কিছু স্বতন্ত্র বেঞ্চমার্কিং করেছি king মূলত আমি কম্প্রেশনকে চ্যালেঞ্জ করার চেষ্টা করার জন্য প্রচুর জিনিসগুলিকে বদলেছি। এছাড়াও আমি এলোমেলো শব্দের একটি সংক্ষিপ্ত পাঠ্য ক্ষেত্র এবং দুটি সিমুলেটেড কারণ যুক্ত করেছি।
উপাত্ত
library(dplyr)
library(tibble)
library(OpenRepGrid)
n <- 1000000
set.seed(1234)
some_levels1 <- sapply(1:10, function(x) paste(LETTERS[sample(1:26, size = sample(3:8, 1), replace = TRUE)], collapse = ""))
some_levels2 <- sapply(1:65, function(x) paste(LETTERS[sample(1:26, size = sample(5:16, 1), replace = TRUE)], collapse = ""))
test_data <- mtcars %>%
rownames_to_column() %>%
sample_n(n, replace = TRUE) %>%
mutate_all(~ sample(., length(.))) %>%
mutate(factor1 = sample(some_levels1, n, replace = TRUE),
factor2 = sample(some_levels2, n, replace = TRUE),
text = randomSentences(n, sample(3:8, n, replace = TRUE))
)
পড় ও লিখ
ডেটা লেখা সহজ।
library(arrow)
write_parquet(test_data , "test_data.parquet")
# you can also mess with the compression
write_parquet(test_data, "test_data2.parquet", compress = "gzip", compression_level = 9)
ডেটা পড়াও সহজ।
read_parquet("test_data.parquet")
# this option will result in lightning fast reads, but in a different format.
read_parquet("test_data2.parquet", as_data_frame = FALSE)
আমি প্রতিযোগী কয়েকটি বিকল্পের বিরুদ্ধে এই তথ্যটি পরীক্ষা করে দেখেছি এবং উপরের নিবন্ধটির চেয়ে কিছুটা আলাদা ফলাফল পেয়েছি, যা প্রত্যাশিত।
এই ফাইলটি বেঞ্চমার্ক নিবন্ধের মতো বৃহত্তর আর কোথাও নেই, সুতরাং এটির পার্থক্যও সম্ভবত।
টেস্ট
- আরডিএস: test_data.rds (20.3 এমবি)
- parquet2_native: (উচ্চ সংকোচনের সাথে 14.9 এমবি এবং
as_data_frame = FALSE
)
- parquet2: test_data2.parquet (উচ্চ সংকোচনের সাথে 14.9 মেগাবাইট)
- parquet: test_data.parquet (40.7 এমবি)
- fst2: test_data2.fst (উচ্চ সংকোচনের সাথে ২ 27.৯ এমবি)
- fst: test_data.fst ( .8 MB.৮ এমবি)
- fread2: test_data.csv.gz (23.6MB)
- ফ্রেড : টেস্ট_ডাটা সিএসভি (98.7MB)
- ফেদার_আরো : টেস্ট_ডেটা.ফ্যাথার (157.2 এমবি সহ পড়ুন
arrow
)
- পালক: test_data.feather (157.2 মেগাবাইট সহ পড়া
feather
)
পর্যবেক্ষণ
এই নির্দিষ্ট ফাইলের জন্য, fread
আসলে খুব দ্রুত। আমি অত্যন্ত সঙ্কুচিত parquet2
পরীক্ষা থেকে ছোট ফাইল আকার পছন্দ করি । আমার data.frame
সত্যিকারের গতি বাড়ানোর প্রয়োজনে আমি দেশী ডেটা ফর্ম্যাটটির সাথে কাজ করার জন্য সময়টি বিনিয়োগ করতে পারি।
এখানেও fst
দুর্দান্ত পছন্দ। যদি হয় আমার গতি বা ফাইলের আকারের বাণিজ্য বন্ধ হওয়ার প্রয়োজন হয় তার উপর নির্ভর করে আমি অত্যন্ত সঙ্কুচিত fst
ফর্ম্যাট বা উচ্চ সংক্ষেপিত ব্যবহার parquet
করব।