2016-04-19 114 views
3

我使用python,這是Spark Rdd/dataframes。檢查類型:如何檢查是RDD還是數據框?

我試過isinstance(東西,RDD),但RDD沒有被識別。

我之所以需要這樣做:

我寫其中兩個RDD和dataframes可以通過一個函數,所以我需要做input.rdd得到底層RDD如果數據幀在傳遞

回答

3

isinstance會工作得很好:

from pyspark.sql import DataFrame 
from pyspark.rdd import RDD 

def foo(x): 
    if isinstance(x, RDD): 
     return "RDD" 
    if isinstance(x, DataFrame): 
     return "DataFrame" 

foo(sc.parallelize([])) 
## 'RDD' 
foo(sc.parallelize([("foo", 1)]).toDF()) 
## 'DataFrame' 

但單牒是更優雅的方式:

from functools import singledispatch 

@singledispatch 
def bar(x): 
    pass 

@bar.register(RDD) 
def _(arg): 
    return "RDD" 

@bar.register(DataFrame) 
def _(arg): 
    return "DataFrame" 

bar(sc.parallelize([])) 
## 'RDD' 

bar(sc.parallelize([("foo", 1)]).toDF()) 
## 'DataFrame' 

如果你不介意額外的依賴multipledispatch也是一個有趣的選擇:

from multipledispatch import dispatch 

@dispatch(RDD) 
def baz(x): 
    return "RDD" 

@dispatch(DataFrame) 
def baz(x): 
    return "DataFrame" 

baz(sc.parallelize([])) 
## 'RDD' 

baz(sc.parallelize([("foo", 1)]).toDF()) 
## 'DataFrame' 

最後最Python化的方法是簡單地查看接口:

def foobar(x): 
    if hasattr(x, "rdd"): 
     ## It is a DataFrame 
    else: 
     ## It (probably) is a RDD 
相關問題