मैं ओआरसी फाइलों में डेटाबेस टेबल से डेटा लिखने के लिए डस्क और पीओओआरसी का उपयोग कर रहा हूं। सही प्रकार निर्दिष्ट करने के लिए, मैं मेटा पैरामीटर read_sql_table का उपयोग कर रहा हूं। पंडों का मेरा संस्करण 1.2.1 . है

और यहाँ मेरे कोड का एक अंश है:

kwargs = dict(
            table=fetch_object_name,
            index_col=fetch_index_col,
            uri=uri,
            meta=dask_meta,
            columns=list(dask_meta.columns)
        )
dask_stream = dd.read_sql_table(**kwargs)
print(dask_stream.dtypes)

dask_stream.map_partitions(
                write_to_orc,
                data_path,
                meta=dask_meta
            ).compute()

यह लौटता है

IDX01             Int64
IDX02             Int64
COL01            object
COL02            object
COL03             Int64
COL04             Int64
COL05             Int64
COL06             Int64
COL07           float64
COL08           float64
COL09           float64
COL10            object
COL11            object
COL12    datetime64[ns]
dtype: object

Write_to_orc फ़ंक्शन में, मैं उन्हें एक फ़ाइल में लिखने के लिए पंक्तियों पर पुनरावृति करना चाहता हूं, लेकिन जब मैं लाइनों को प्रिंट करना चाहता हूं तो मुझे यह अजीब व्यवहार मिला:

def write_to_orc(df, data_path):
    print(df.dtypes)
    for row in df.itertuples():
        print(row)

मैंने पाया :

IDX01             Int64
IDX02             Int64
COL01            object
COL02            object
COL03             Int64
COL04             Int64
COL05             Int64
COL06             Int64
COL07           float64
COL08           float64
COL09           float64
COL10            object
COL11            object
COL12    datetime64[ns]
dtype: object
Pandas(Index=1, IDX01=1400101, IDX02=447, COL01='Dim   ', COL02='1 Dimanche 2040 (Q1)', COL03=98, COL04=-19191, COL05=21082041, COL06=-6071621782820847456, COL07=3131.25, COL08=-1e+121, COL09=4.775582863893604e+18, COL10=datetime.date(1987, 6, 17), COL11=datetime.time(2, 11, 50), COL12=Timestamp('2012-04-27 13:02:23.860000'))

ऐसा लगता है कि dtypes अच्छे हैं लेकिन COL10 और COL11 कॉलम मानों के गलत प्रकार हैं। किसी तरह पंडों ने उन्हें दिनांक और समय में परिवर्तित कर दिया (और किसी भी समय मैंने पंडों को दिनांक और समय प्रारूप दिया है), संबंधित प्रकार के बावजूद वस्तु हैं !!

यह मुझे बहुत परेशान करता है क्योंकि ओआरसी के लिए TIME एक मान्यता प्राप्त प्रकार नहीं है, इसलिए मैं एक स्ट्रिंग के रूप में संभाला जाना चाहता था।

क्या आप इस अजीब व्यवहार को समझने में मेरी मदद कर सकते हैं?

पहले ही, आपका बहुत धन्यवाद

1
Kaname93 11 फरवरी 2021, 14:16

1 उत्तर

सबसे बढ़िया उत्तर

आपके पहले आउटपुट में COL10 और COL11 को object dtype के रूप में रिपोर्ट किया गया है, जो बताता है कि उन्हें मूल रूप से datetime ऑब्जेक्ट के रूप में dask_meta में डाला जा सकता है (कम से कम कुछ पंक्तियाँ)। इससे बाहर निकलने के तरीके के रूप में आप स्पष्ट रूप से इन कॉलमों को String के रूप में सेट कर सकते हैं (कैपिटलाइज़्ड संस्करण नए dtype की बात कर रहा है) dask_meta में।

1
SultanOrazbayev 11 फरवरी 2021, 14:29