3
我使用python,這是Spark Rdd/dataframes。檢查類型:如何檢查是RDD還是數據框?
我試過isinstance(東西,RDD),但RDD沒有被識別。
我之所以需要這樣做:
我寫其中兩個RDD和dataframes可以通過一個函數,所以我需要做input.rdd得到底層RDD如果數據幀在傳遞
我使用python,這是Spark Rdd/dataframes。檢查類型:如何檢查是RDD還是數據框?
我試過isinstance(東西,RDD),但RDD沒有被識別。
我之所以需要這樣做:
我寫其中兩個RDD和dataframes可以通過一個函數,所以我需要做input.rdd得到底層RDD如果數據幀在傳遞
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