Parquet को NDJSON में बदलें

यहाँ आप Parquet को NDJSON में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।

  • कहाँ चलता है आपके ब्राउज़र में। फ़ाइल कभी अपलोड नहीं होती।
  • बिना नुक़सान कुछ नहीं छोड़ा जाता। Parquet में जो था, NDJSON में ठीक वही रहता है।
  • फ़ाइल आकार की सीमा हर फ़ाइल 100 MB तक, मुफ़्त, बिना खाते के।

एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।

इकलौता टेक्स्ट लक्ष्य जो कॉलम के प्रकार रखता है

Parquet फ़ाइल अपने फ़ुटर में हर कॉलम का प्रकार दर्ज करती है। उसे CSV या टैब-सीमांकित टेक्स्ट में बदलिए और वह घोषणा चली जाती है: हर मूल्य अक्षर बन जाता है, और आगे जो कुछ भी फ़ाइल पढ़ता है वह अक्षरों की शक्ल से दोबारा प्रकार का अंदाज़ा लगाता है — आमतौर पर अलग ढंग से, और हमेशा उस स्कीमा के फ़ायदे के बिना जो वहीं मौजूद थी।

JSON के अपने प्रकार होते हैं। संख्या संख्या ही रहती है, बूलियन बूलियन ही, और null null ही, इसलिए दूसरे छोर पर पहुँचा रिकॉर्ड अपने बारे में वही कहता है जो Parquet का कॉलम कहता था। जब गंतव्य किसी स्कीमा वाली सेवा या क़तार का हो, तो यह छोटा फ़र्क़ नहीं — यह «फ़ील्ड स्ट्रिंग थी इसलिए API ने ठुकरा दिया» जैसी पूरी श्रेणी की समस्याओं को बीच से हटा देता है।

नेस्टिंग स्ट्रिंग बनकर बचती है, संरचना से एक क़दम कम

यह जान लेने लायक़ सीमा है, आउटपुट पर कुछ भी बनाने से पहले। Parquet सूचियाँ, स्ट्रक्ट और मैप को अपने ढंग से रखता है, और वे कॉलम JSON में नेस्टेड JSON के बजाय JSON रखने वाली स्ट्रिंग बनकर लिखे जाते हैं। सूची वाला कॉलम `"[\"a\",\"b\"]"` की तरह आता है, जो मूल्य का सही और पूरा रिकॉर्ड है और वह आकार नहीं जो सरणी उम्मीद रखने वाला उपभोक्ता स्वीकार करेगा।

ठीक करना एक पास है। बदली फ़ाइल पर `jq -c '.tags |= fromjson'` उस फ़ील्ड को असली सरणी में बदल देता है, और यही स्ट्रक्ट कॉलम पर भी लागू होता है। इसे साफ़-साफ़ करना यह तय करने का मौक़ा भी है कि फ़ील्ड को सचमुच क्या कहा जाए और गंतव्य को नेस्टेड चाहिए भी या नहीं — कई ख़ुशी-ख़ुशी स्ट्रिंग ही ले लेते हैं।

समय-चिह्न ISO स्ट्रिंग बनते हैं, जो ईमानदार जवाब है

JSON में कोई तारीख़ प्रकार नहीं। इसलिए समय-चिह्न कॉलम ISO 8601 स्ट्रिंग की तरह लिखा जाता है — `2024-03-11T09:30:00.000Z` — जिसे हर भाषा, डेटाबेस और स्कीमा वैलिडेटर बिना किसी फ़ॉर्मेट बताए पढ़ लेता है, और जो सादे पाठ की तरह भी कालानुक्रमिक रूप से छँट जाता है।

विकल्प एपोक संख्या होती, और वह किसी इंसान के पढ़ने वाले रिकॉर्ड में बदतर है: 1710149400000 वाली फ़ील्ड बिना दोनों — एपोक और इकाई — जाने बिना समझ नहीं आती, और दो आम इकाइयाँ हज़ार के गुणक से अलग होती हैं। अगर गंतव्य को एपोक मिलीसेकंड ही चाहिए, तो ISO से बदलना एक ही अभिव्यक्ति है और दिशा साफ़ है।

बड़े पूर्णांक अंक खोने के बजाय स्ट्रिंग बनते हैं

Parquet में 64-बिट पूर्णांक प्रकार है और JSON की संख्याएँ व्यवहार में दोनों तरफ़ के पार्सर जो सटीक रख सकें उन्हीं तक सीमित हैं — ज़्यादातर के लिए यह 53 बिट है। उससे आगे का मूल्य बिना बदले संख्या के रूप में नहीं ढोया जा सकता।

बदलाव उन्हें स्ट्रिंग लिखता है। सुरक्षित दायरे के भीतर मूल्य संख्या ही रहता है, बाहर वाला पूरे अंक के साथ उद्धृत स्ट्रिंग बन जाता है, और सीमा-रेखा फैलाने वाला कॉलम दोनों रखेगा। यह मिला-जुला प्रकार थोड़ा परेशान करने वाला है और सही सौदा है: गोल किया गया ऑर्डर संदर्भ बिलकुल ऑर्डर संदर्भ जैसा दिखता है, किसी से मेल नहीं खाता, और बाद में उसका सुराग़ लगाना बहुत मुश्किल है।

एक लाइन एक रिकॉर्ड, बिना किसी सरणी के इर्द-गिर्द

फ़ाइल प्रति लाइन एक पूरा JSON ऑब्जेक्ट है और और कुछ नहीं — कोई खुला ब्रैकेट नहीं, रिकॉर्डों के बीच कोई कॉमा नहीं, कोई बंद ब्रैकेट नहीं। JSON सरणी की उम्मीद रखने वाला पार्सर दूसरी लाइन पर ही असफल होगा, और यह इरादे के मुताबिक़ फ़ॉर्मेट का काम है, कोई ख़राबी नहीं।

यह अनुपस्थिति जो देती है वह यह है कि उपभोक्ता एक लाइन पढ़, उस पर काम कर, उसे छोड़ और आगे बढ़ सकता है, फ़ाइल का आकार चाहे जो हो। इसका यह भी मतलब है कि आउटपुट लाइन से पहचाना जा सकता है: `head -n 1000` एक नमूना देता है जो ख़ुद बाक़ी सब में मान्य इनपुट है।

Parquet एक्सट्रैक्ट को क़तार या API में दोबारा चलाना

यह इस काम का आम रूप है। कोई तालिका डेटा प्लैटफ़ॉर्म में बैठी है, और उसके बाहर की कोई चीज़ — सर्च इंडेक्स, मैसेज क़तार, बैकफ़िल हो रही सेवा — JSON लेती है और Parquet के बारे में कभी नहीं सुना। NDJSON वह फ़ॉर्मेट है जो दोनों के बीच बैठता है, और इसे एक नई लाइन के अलावा किसी फ़्रेमिंग की ज़रूरत नहीं।

लाइनें पढ़कर हर एक को पोस्ट करने वाला शेल लूप छोटे बैकफ़िल के लिए काफ़ी है। पहले जाँचने लायक़ चीज़ है फ़ील्ड नाम: डेटा प्लैटफ़ॉर्म कॉलम को उस पाइपलाइन के हिसाब से नाम देता है जिसने उसे बनाया, और सेवा को आमतौर पर कुछ और चाहिए होता है।

ख़ाली मूल्य null ही रहते हैं, ख़ाली नहीं बनते

Parquet कॉलम में null JSON में `null` लिखा जाता है, जो एक ऐसा फ़र्क़ सुरक्षित रखता है जो कोई सीमांकित फ़ॉर्मेट नहीं ढो सकता: null और ख़ाली स्ट्रिंग अलग-अलग मूल्य हैं, और वे अलग-अलग ही पहुँचते हैं।

यह वहाँ मायने रखता है जहाँ गंतव्य के पास स्कीमा है। स्ट्रिंग घोषित फ़ील्ड null को ठुकरा देगी जब तक कि उसे nullable न घोषित किया गया हो, और वैलिडेटर उसी रिकॉर्ड पर बताएगा जहाँ यह हुआ, लोड होने के वक़्त की जगह।

आकार, और यह भंडारण फ़ॉर्मेट क्यों नहीं है

आउटपुट उस फ़ाइल से कहीं बड़ा है जिससे वह आया। हर रिकॉर्ड हर फ़ील्ड नाम दोहराता है, हर स्ट्रिंग उद्धृत होती है, और Parquet फ़ाइल को छोटा रखने वाला संपीड़न, डिक्शनरी एनकोडिंग या बाइनरी रूप में से कुछ भी टेक्स्ट में नहीं बचता।

यह इसलिए स्वीकार्य है क्योंकि यह फ़ाइल एक परिवहन कलाकृति है। यह किसी उपभोक्ता से एक बार पढ़े जाने और फिर मिटाए जाने के लिए है, और स्थायी कॉपी Parquet ही रहती है। जहाँ NDJSON को उपभोग की जगह सँभालकर रखा जा रहा हो, वह संकेत है कि डिज़ाइन में कुछ ग़लत हुआ है।

एक्सट्रैक्ट कहाँ पढ़ा जाता है, और पंक्ति गिनती की सीमा क्या तय करती है

Parquet रीडर इस पन्ने से मांग पर लोड होने वाली लाइब्रेरी है और JSON वहीं लिखा जाता है, इसलिए कोई अनुरोध फ़ाइल नहीं ढोता। किसी प्लैटफ़ॉर्म के बीच से — जोड़ से पहले, नक़ाब लगाने से पहले — लिया एक्सट्रैक्ट के लिए यह आमतौर पर तय करता है कि कोई ऑनलाइन कन्वर्टर इस्तेमाल किया भी जा सकता है या नहीं।

हर पंक्ति कुछ भी लिखे जाने से पहले पूरी तरह बना ली जाती है, इसलिए याददाश्त ही सीमा है। Parquet संपीड़ित है, इसलिए मामूली फ़ाइल भी बहुत फैल सकती है और सीमा डिस्क वाले आकार से पहले आ जाती है। बड़ी तालिका के लिए, DuckDB Parquet फ़ाइल पढ़कर एक ही statement में NDJSON लिख सकता है, दोनों को याददाश्त में रखे बिना।

Parquet को NDJSON में ऐसे बदलें

  1. अपनी Parquet फ़ाइल इस पेज पर छोड़ें, या चुनने के लिए दबाएँ।
  2. लक्ष्य के रूप में NDJSON चुनें। कन्वर्ज़न आपके ब्राउज़र में होता है और फ़ाइल अपलोड नहीं होती।
  3. तैयार NDJSON फ़ाइल डाउनलोड कर लें।

Parquet या NDJSON: क्या बदलता है

Parquet और NDJSON की तुलना
ParquetNDJSON
पूरा नामApache ParquetNewline-Delimited JSON
फ़ाइल एक्सटेंशन.parquet.ndjson, .jsonl
मीडिया टाइपapplication/vnd.apache.parquetapplication/x-ndjson
कंप्रेशनबिना नुक़सान — कुछ छोड़ा नहीं जाता
पहली बार प्रकाशित20132013
प्रकाशकApache Software Foundation
लाइसेंसखुला मानकखुला मानक
आज की स्थितिमौजूदामौजूदा
ब्राउज़र में खुलता हैकोई ब्राउज़र नहींकोई ब्राउज़र नहीं
इसकी जगह विचारणीयCSV, JSONJSON, CSV

क्या बचा रहता है

कुछ नहीं खोता। Parquet और NDJSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।

लक्ष्य फ़ॉर्मेट क्या और सँभाल सकता है

NDJSON काम करने का फ़ॉर्मेट है और Parquet बनकर तैयार फ़ॉर्मेट। जो लौटता है वह पन्ने की तस्वीर नहीं बल्कि बदली जा सकने वाली लिखावट है — आम तौर पर यही इस कन्वर्ज़न की वजह होती है, और यही इसकी सीमा भी।

नतीजा खोलना

pandas Parquet और NDJSON — दोनों पढ़ लेता है, इसलिए आप नतीजे को असली फ़ाइल के बग़ल में रखकर देख सकते हैं, बिना दूसरा प्रोग्राम खोले।

कौन-सा फ़ॉर्मेट किस काम के लिए है

NDJSON 2013 से चला आ रहा है। jq और pandas इस फ़ॉर्मेट को पढ़ लेते है।

Parquet से NDJSON: आम सवाल

क्या मेरी Parquet फ़ाइल कहीं अपलोड होती है?

नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो। इस जोड़ी के पीछे parquet-wasm है, Apache Arrow के पाठक का एक WebAssembly संस्करण; आपका ब्राउज़र इसे एक बार उतारता है और फिर सहेज कर रखता है।

क्या Parquet को NDJSON में बदलना मुफ़्त है?

हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100। parquet-wasm आपकी अपनी मशीन पर उतरता है और वहीं चलता है — इसीलिए उस पर कोई गिनती नहीं है।

Parquet को NDJSON में बदलने पर क्या गुणवत्ता जाती है?

नहीं। NDJSON वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।

क्या Parquet से NDJSON बिना नुक़सान का है?

कुछ नहीं खोता। Parquet और NDJSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।

क्या NDJSON फ़ाइल उसके बाद बदली जा सकती है?

NDJSON काम करने का फ़ॉर्मेट है और Parquet बनकर तैयार फ़ॉर्मेट। जो लौटता है वह पन्ने की तस्वीर नहीं बल्कि बदली जा सकने वाली लिखावट है — आम तौर पर यही इस कन्वर्ज़न की वजह होती है, और यही इसकी सीमा भी।

इन फ़ॉर्मेट के बारे में और