পোস্ট জিআইএস-এ বড় জিওজসন ফাইল (গুলি) লোড করার জন্য ওগ্রো 2 জিআরের বিকল্প Al


24

আমার কাছে একটি 7 জিবি জিওজেসন ফাইল রয়েছে যা আমি একটি পোস্টজিআইএস ডাটাবেসে লোড করতে চাই। আমি ogr2ogr ব্যবহার করার চেষ্টা করেছি তবে এটি ব্যর্থ হয় কারণ ফাইলটি ogr2ogr এর জন্য মেমরির মধ্যে লোড করতে এবং তারপরে প্রক্রিয়া করার জন্য খুব বড়।

পোস্ট জিআইএসে এই জিওজসন ফাইলটি লোড করার জন্য কি অন্য কোনও বিকল্প আছে?

আমি যে ওগার 2ogr ত্রুটি পাই তা হ'ল:

ত্রুটি 2: সিপিএলম্যালোক (): -611145182 বাইট বরাদ্দ মেমরির বাইরে। এই অ্যাপ্লিকেশনটি রানটাইমটিকে অস্বাভাবিক উপায়ে বন্ধ করার জন্য অনুরোধ করেছে। আরও তথ্যের জন্য দয়া করে অ্যাপ্লিকেশনটির সহায়তা দলের সাথে যোগাযোগ করুন।


1
আপনি কি "-gt" বিকল্পটি ব্যবহার করে দেখেছেন? ডিফল্টরূপে এটি লেনদেনের জন্য 200 টি বৈশিষ্ট্যকে গোষ্ঠী করে।
পাবলো

আমি -gt বিকল্প সম্পর্কে সচেতন ছিলাম না এবং এর আগে এটি ব্যবহার করে দেখিনি। আমি সবেমাত্র -gt বিকল্পটি ব্যবহার করে আবার রান করার চেষ্টা করেছি এবং দুর্ভাগ্যক্রমে একই ত্রুটির মুখোমুখি হয়েছি। আমি অনুসন্ধানযোগ্য বিকল্পগুলির সংখ্যা সীমাবদ্ধ করতে -WHERE বিকল্পটি ব্যবহার করার চেষ্টাও করেছি, তবে এটি কোনওরূপে সহায়ক বলে মনে হয় নি।
রায়ানডাল্টন

জিডিএল / ওজিআর ২.৩.০ এ বড় জিওজেএসন ফাইলগুলি পড়ার উন্নতি করেছে যা মেমরির ওভারহেডকে হ্রাস করে।
অ্যান্ড্রুহার্ভে

উত্তর:


10

আপনি যে নমুনাটি প্রেরণ করেছেন সেটি দেখায় যে নোটপ্যাড ++ এর মতো সম্পাদক ব্যবহার করে ফাইল ম্যানুয়ালি ভাগ করা সম্ভব

1) প্রতিটি অংশের জন্য একটি শিরোনাম তৈরি করুন:

{"type":"FeatureCollection","features":[

2) শিরোনামের পরে অনেকগুলি বৈশিষ্ট্য রাখুন:

{"geometry": {"type": "Point", "coordinates": [-103.422819, 20.686477]}, "type": "Feature", "id": "SG_3TspYXmaZcMIB8GxzXcayF_20.686477_-103.422819@1308163237", "properties": {"website": "http://www.buongiorno.com", "city": "M\u00e9xico D.F. ", "name": "Buongiorno", "tags": ["mobile", "vas", "community", "social-networking", "connected-devices", "android", "tablets", "smartphones"], "country": "MX", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_3TspYXmaZcMIB8GxzXcayF_20.686477_-103.422819@1308163237.json", "address": "Le\u00f3n Tolstoi #18 PH Col. Anzures", "owner": "simplegeo", "postcode": "11590"}},

3) এর সাথে খণ্ডটি শেষ করুন:

]}

সম্পাদনা - পাইথন কোডটি এখানে ফাইলটি সংজ্ঞায়িত আকারের টুকরো (বৈশিষ্ট্যের সংখ্যায়) বিভক্ত করবে:

import sys

class JsonFile(object):
    def __init__(self,file):
        self.file = open(file, 'r') 
    def split(self,csize):
        header=self.file.readline()
        number=0
        while True:
            output=open("chunk %s.geojson" %(number),'w')
            output.write(header)
            number+=1
            feature=self.file.readline()
            if feature==']}':
                break
            else:
                for i in range(csize):
                    output.write(feature)
                    feature=self.file.readline()
                    if feature==']}':
                        output.write("]}")
                        output.close()
                        sys.exit("Done!")
                output.write("]}")
                output.close()

if __name__=="__main__":
    myfile = JsonFile('places_mx.geojson')
    myfile.split(2000) #size of the chunks.

19

দুর্ভাগ্যক্রমে জেএসএন, অনেকটা এক্সএমএলের মতো, স্ট্রিম প্রসেসিংয়ের জন্য খারাপভাবে উপযোগী তাই প্রায় সমস্ত বাস্তবায়নের জন্য পুরো ডেটাসেটটি মেমরিতে লোড হওয়া প্রয়োজন। আপনার ক্ষেত্রে এটি যদি ছোট সেটগুলির জন্য ঠিক থাকে তবে ডেটাসেটকে ছোট, পরিচালনাযোগ্য অংশগুলিতে ভাঙ্গা ছাড়া আর কোনও বিকল্প নেই।

পাবলো এর সমাধানটির উন্নতি করে, এখানে একটি যা আপনাকে সম্পাদনাতে ফাইলটি খোলার এবং লোড করার প্রয়োজন হয় না এবং হাতে ভাগ হয়ে যায় তবে যতটা সম্ভব পুরো প্রক্রিয়াটি স্বয়ংক্রিয় করার চেষ্টা করে।

একটি ইউনিক্স হোস্টে জিনসন ফাইলটি অনুলিপি করুন (লিনাক্স, ওএসএক্স) অথবা উইন্ডোজে সাইগউইন সরঞ্জাম ইনস্টল করুন। তারপরে একটি শেল খুলুন এবং ফাইল থেকে প্রথম এবং শেষ সারিটি সরাতে ভিএম ব্যবহার করুন:

$ vim places.json

প্রথম লাইনটি সরাতে dd টাইপ করুন , তারপরে ফাইলের প্রান্তটি সরানোর জন্য SHIFT-G লিখুন, শেষ লাইনটি সরাতে আবার dd টাইপ করুন । এখন টাইপ করুন : পরিবর্তনগুলি সংরক্ষণ করতে wq । এটি সর্বোচ্চ কয়েক মিনিট সময় নিতে হবে।

এখন আমরা ইউনিক্সের নিখুঁত শক্তিকে আরও বেশি ব্যবস্থাপনযোগ্য অংশগুলিতে ভাগ করে নেব ness শেল টাইপ:

$ split -l 10000 places.json places-chunks-

একটি বিয়ার ধরুন। এটি ফাইলকে অনেক ছোট ফাইলগুলিতে বিভক্ত করবে, যার মধ্যে প্রতিটি 10000 লাইন থাকবে। আপনি যতক্ষণ লাইনের পরিমাণ কম রাখবেন ততক্ষণ লাইনের সংখ্যা বাড়াতে পারবেন যাতে ogr2gr এটি পরিচালনা করতে পারে।

এখন আমরা প্রতিটি ফাইলের মাথা এবং লেজ আটকে যাচ্ছি:

$ echo '{"type":"FeatureCollection","features":[' > head
$ echo ']}' > tail
$ for f in places-chunks-* ; do cat head $f tail > $f.json && rm -f $f ; done

একটি ছিনতাই ধরুন। প্রথম দুটি কমান্ড সঠিকভাবে সঠিক বিষয়বস্তু (কেবল সুবিধার জন্য) সহ একটি শিরোলেখ এবং পাদচরণকারী ফাইল তৈরি করে, সর্বশেষে সর্বশেষে আমরা উপরে বিভক্ত প্রতিটি অংশকে হেডার এবং ফুটার যুক্ত করব এবং হেডারলেস / পাদদেশবিহীন খণ্ডটি সরিয়ে ফেলব (স্থান বাঁচাতে) )।

এই মুহুর্তে আপনি আশা করতে পারেন যে ogr2ogr সহ অনেকগুলি স্থান - *। জেএসন ফাইলগুলি প্রসেস করতে পারেন:

$ for f in places-chunks-*.json ; do ogr2ogr -your-options-here $f ; done

1
এই পদ্ধতিটি সহ, আমাদের নিশ্চিত করতে হবে না যে কোনও ফাইল ব্লকের শেষে ফাইল "খণ্ডগুলি" বিভক্ত হয়েছিল? যেহেতু আমি ইতিমধ্যে পাইথনে ডেটা প্রাক-প্রক্রিয়াজাত করে শিরোনাম এবং পাদলেখ তথ্য যুক্ত করতে, তাই ডেটা কাটাতে আমার একটি কাউন্টার যুক্ত করতে সক্ষম হওয়া উচিত। আমি যে এগিয়ে যেতে হবে। পরামর্শের জন্য ধন্যবাদ.
রায়ানডাল্টন

আপনি যে উদাহরণস্বরূপ ডেটা সরবরাহ করেছেন তাতে প্রতি লাইনে একটি বৈশিষ্ট্য ছিল, সে কারণেই আমি স্প্লিট-এল দিয়ে চলেছি । যদি প্রকৃত ডেটা নিয়ে এটি না হয় তবে আমি ভয় করি যে এটি কাজ করবে না।
unicoletti

হ্যাঁ, অবশ্যই আপনি সঠিক, যেখানে প্রতিটি বৈশিষ্ট্য পৃথক লাইনে রয়েছে। আমি সারাটা পথ ধরে সেটাই ভাবছিলাম না।
RyanDalton

ফাইলটি না খুলে লাইনগুলি সরাতে। প্রথম লাইনটি sed -i "1d" places.json সরান : প্রথম 4 টি লাইন sed -i "1,4d" places.json সরান : শেষ 4 টি লাইন সরান: head -n -4 places.json > places2.json
উদাহরণস্বরূপ

2

আপনার ডেটা এফএমই ডেস্কটপ দিয়ে লোড করা সম্ভব। এটা খুব সহজ.


এটি কি এর মতো অত্যন্ত বড় ফাইলটি প্রক্রিয়া করবে?
RyanDalton

উদাহরণস্বরূপ, রূপান্তর করার আগে ফাইলটিকে অনেকগুলি ফাইলে বিভক্ত করুন। hjsplit.org এবং পোস্টজিআইএসে আমদানির জন্য এফএমই ডেস্কটপে নিউজ ফাইলগুলি আমদানি করুন।

1
সম্ভবত, এবং যদি এটি
অনুমোদন

2

পাইথনে এমন অলস পাঠক এবং লেখককে সরাসরি লেখার জন্য এগিয়ে যেতে হবে যা আপনার জিওজসন ফাইলটিকে মেমরির সমস্ত কিছু না করেই আরও ছোট শেফফিল ফর্ম্যাটে বা সরাসরি এসকিউএলে রূপান্তর করতে পারে। একবার রূপান্তরিত হওয়ার পরে, দেশীয় পোস্টজিআইএস সরঞ্জামগুলি বড় ডেটা সেট আমদানি করতে পারে। ওজিআর-এ জিওজসন সমর্থন তুলনামূলকভাবে নতুন এবং বড় ফাইল হ্যান্ডল করার জন্য কোনও পতাকা নেই।

আপনি যদি কোনওভাবে আপনার ফাইলের একটি পরিচালনাযোগ্য অংশ ভাগ করতে পারেন তবে আমি আপনাকে সাহায্য করতে পারি।


2

এটি জিডিএল ২.৩.০-তে উন্নত হয়েছে https://trac.osgeo.org/gdal/wiki/Release/2.3.0- নিউজ এখন বৃহত্তর জিওজেএসন ফাইলগুলি পড়ার ক্ষেত্রে এটি আরও অনেক বেশি স্মৃতিশক্তিপূর্ণ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.