Python API ব্যবহার করে Avro Data Handle করা

Avro API এর সাথে কাজ - অ্যাপাচি অভ্র (Avro) - Big Data and Analytics

421

Apache Avro হল একটি জনপ্রিয় ডেটা সিরিয়ালাইজেশন ফরম্যাট যা ডেটাকে একটি নির্দিষ্ট কাঠামো (schema) অনুযায়ী সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সাহায্য করে। Python-এ Avro ডেটা হ্যান্ডল করার জন্য avro-python3 নামক প্যাকেজটি ব্যবহার করা হয়, যা Apache Avro ফরম্যাটে ডেটা প্রসেসিংয়ের জন্য Python API প্রদান করে।

এখানে Python API ব্যবহার করে Avro ডেটা সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কিভাবে করা যায়, তা বিস্তারিতভাবে দেখানো হবে।


১. প্রথমে avro-python3 ইনস্টল করা

Avro এর Python API ব্যবহার করতে হলে প্রথমে avro-python3 প্যাকেজটি ইনস্টল করতে হবে। এটি Python 3 এর জন্য উন্নয়ন করা হয়েছে।

pip install avro-python3

২. Avro স্কিমা তৈরি করা

Avro ডেটা হ্যান্ডল করার জন্য একটি স্কিমা প্রয়োজন হয়, যা JSON ফরম্যাটে ডেটার কাঠামো নির্ধারণ করে। স্কিমা তৈরি করার সময়, ফিল্ডের নাম এবং টাইপ উল্লেখ করতে হয়। একটি উদাহরণ হিসেবে, এখানে একটি স্কিমা তৈরি করা হলো, যেখানে একটি ইউজারের নাম, বয়স এবং ইমেইল ঠিকানা থাকবে।

Avro স্কিমা (JSON Format):

{
   "type": "record",
   "name": "User",
   "fields": [
      {"name": "name", "type": "string"},
      {"name": "age", "type": "int"},
      {"name": "emails", "type": {"type": "array", "items": "string"}}
   ]
}

এটি একটি ইউজার রেকর্ডের স্কিমা যা name, age, এবং emails ফিল্ড ধারণ করে। name এবং emails ফিল্ডের টাইপ string, এবং age ফিল্ডের টাইপ int


৩. Avro Data Serialization (ডেটা সিরিয়ালাইজেশন)

সিরিয়ালাইজেশন হল ডেটাকে একটি নির্দিষ্ট ফরম্যাটে রূপান্তরিত করা যাতে তা ডিস্ট্রিবিউটেড সিস্টেম বা ফাইল সিস্টেমে সংরক্ষণ করা যায়। Python-এ Avro ডেটা সিরিয়ালাইজ করতে স্কিমা অনুযায়ী ডেটা লিখতে হয়।

উদাহরণ: Avro Data Serialization

import avro.schema
import avro.io
import io

# স্কিমা লোড করা
schema = avro.schema.Parse(open("user_schema.avsc", "r").read())

# ডেটা
user_data = {
    "name": "John Doe",
    "age": 25,
    "emails": ["john.doe@example.com"]
}

# Avro ফাইল তৈরি এবং ডেটা সিরিয়ালাইজ করা
with open("user_data.avro", "wb") as f:
    writer = avro.io.DatumWriter(schema)
    # ইনপুট ফাইল হিসেবে বাইনারি ফাইল স্ট্রিম
    encoder = avro.io.BinaryEncoder(f)
    writer.write(user_data, encoder)

এখানে:

  • স্কিমা .avsc ফাইল থেকে লোড করা হচ্ছে।
  • একটি ডিকশনারি আকারে ডেটা (যেমন ইউজারের নাম, বয়স এবং ইমেইল) তৈরি করা হচ্ছে।
  • DatumWriter ব্যবহার করে ডেটাকে BinaryEncoder এর মাধ্যমে সিরিয়ালাইজ করা হচ্ছে এবং ফাইলে লেখা হচ্ছে।

৪. Avro Data Deserialization (ডেটা ডেসিরিয়ালাইজেশন)

ডেসিরিয়ালাইজেশন হল সিরিয়ালাইজড ডেটা আবার আগের আকারে রূপান্তরিত করার প্রক্রিয়া, যাতে তা ব্যবহারযোগ্য হয়। Avro ডেটা ডেসিরিয়ালাইজ করতে আবার স্কিমা প্রয়োজন হয়, যাতে ডেটা ফাইল থেকে সঠিকভাবে পড়া যায়।

উদাহরণ: Avro Data Deserialization

import avro.schema
import avro.io
import io

# স্কিমা লোড করা
schema = avro.schema.Parse(open("user_schema.avsc", "r").read())

# Avro ফাইল থেকে ডেটা পড়া এবং ডেসিরিয়ালাইজ করা
with open("user_data.avro", "rb") as f:
    reader = avro.io.DatumReader(schema)
    decoder = avro.io.BinaryDecoder(f)
    user_data = reader.read(decoder)

print(user_data)

এখানে:

  • DatumReader ব্যবহার করে ফাইল থেকে ডেটা ডেসিরিয়ালাইজ করা হচ্ছে।
  • BinaryDecoder ব্যবহার করা হচ্ছে ডেটা রিড করার জন্য।
  • শেষে, ডেসিরিয়ালাইজ করা ডেটা একটি Python ডিকশনারি আকারে মুদ্রণ করা হচ্ছে।

আউটপুট:

{'name': 'John Doe', 'age': 25, 'emails': ['john.doe@example.com']}

এখানে ডেটা আবার Python ডিকশনারি আকারে রূপান্তরিত হয়ে ফিরে এসেছে।


৫. Multiple Record Serialization/Deserialization

একাধিক রেকর্ড সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার জন্য আপনি একটি লুপ ব্যবহার করতে পারেন। এটি ডেটার অনেকগুলো রেকর্ড সংরক্ষণ বা পড়তে সহায়ক হবে।

উদাহরণ: একাধিক রেকর্ড সিরিয়ালাইজেশন

with open("user_data_multiple.avro", "wb") as f:
    writer = avro.io.DatumWriter(schema)
    encoder = avro.io.BinaryEncoder(f)
    for user in user_list:  # user_list হল ইউজারের তালিকা
        writer.write(user, encoder)

উদাহরণ: একাধিক রেকর্ড ডেসিরিয়ালাইজেশন

with open("user_data_multiple.avro", "rb") as f:
    reader = avro.io.DatumReader(schema)
    decoder = avro.io.BinaryDecoder(f)
    while True:
        try:
            user_data = reader.read(decoder)
            print(user_data)
        except StopIteration:
            break

৬. Avro Data Handle করার জন্য সাধারণ চ্যালেঞ্জসমূহ

  • স্কিমার সামঞ্জস্য: ডেটার স্কিমা পরিবর্তন হলে পুরোনো ডেটা নতুন স্কিমার সঙ্গে কাজ করবে কিনা তা নিশ্চিত করা গুরুত্বপূর্ণ। Avro-তে স্কিমা ইভোলিউশন সহজতর, তবে এটি সাবধানে পরিচালনা করতে হয়।
  • ফাইল আকারের সমস্যা: অনেক বড় ডেটাসেট হলে Avro ফাইলগুলো বড় হতে পারে। সেক্ষেত্রে ফাইল সাইজ কমানোর জন্য কম্প্রেশন পদ্ধতি ব্যবহার করা উচিত, যেমন Snappy বা Deflate
  • ডেটা কনভার্সন: Avro ফরম্যাট থেকে অন্য ফরম্যাটে ডেটা কনভার্ট করার সময় কিছু সময় অতিরিক্ত প্রসেসিংয়ের প্রয়োজন হতে পারে।

সারাংশ

Python API ব্যবহার করে Avro ডেটা সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন খুবই সহজ এবং কার্যকরী। আপনি Avro স্কিমা তৈরি করে, ডেটা সিরিয়ালাইজ করে একটি ফাইলে লিখতে পারেন এবং পরে সেই ডেটা ডেসিরিয়ালাইজ করে পুনরায় Python ডেটা স্ট্রাকচারে রূপান্তর করতে পারেন। এই প্রক্রিয়া বড় ডেটাসেট এবং ডিস্ট্রিবিউটেড সিস্টেমে ডেটা হ্যান্ডলিংয়ের জন্য খুবই উপযোগী।

Content added By
Promotion

Are you sure to start over?

Loading...