簡體   English   中英

RDD.map和帶有嵌套導入的函數

[英]RDD.map and a function with nested imports

我有一個將字符串轉換為特定類型的方法。 數據是從csv文件讀取的,並用於創建rdd。 為了使此功能正常工作,我必須將import語句放入功能定義中。 這意味着在每次調用函數時執行這些行。 導入的程序包必須存在於群集節點上,否則該功能將不起作用。 是否可以將導入內容從方法中移出並仍然引用它們? 如果是這樣,怎么辦?

def convertType(v, ftype, fmt = '%Y-%m-%d %H:%M:%S %Z', nodate = '1900-01-01 0:00:00: GMT', empty2None = False):
    import datetime
    import decimal
    v = v.strip() # clean up the string
    if empty2None:
    if v == "": # do we have an empty string?
        return None
    ftypes = { 'null': 'None', \
        'date': 'datetime.date(int(v))', \
        'timestamp': 'datetime.datetime.strptime(v if not (v == "") else nodate, fmt)', \
        'binary': 'bytearray(v)', \
        'integer': 'int(v)', \
        'boolean': 'bool(v)', \
        'long': 'long(v)', \
        'double': 'float(v)', \
        'float': 'float(v)', \
        'short': 'int(v)', \
        'byte': 'int(v)', \
        'string': 'str(v)', \
        'decimal': 'decimal.Decimal(v)' \
         }
    return eval(ftypes[ftype.lower()])

data = raw.map(lambda p: [convertType(p[0][i], typeparts[i], fmt, nodate, True) for i in indx]) # convert split text to data rows

為了最大程度地減少導入開銷,您可以嘗試使用mapPartitions 然后,每個分區(而不是每一行)導入一次。

def convertPartitionType(elements):
  import ...
  return [convertType(x) for x in elements]

當然,convertType不會導入任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM