属性名を1つの文字列にグループ化する理由がわかりません。 Pythonリストの順序が保持されているので、単に属性名のリストを持つことができます。
attribute_names = [x for x in dir(jsonData) if '__' not in x]
そこからデータフレームを作成できます。あなたがSparkTypesを指定する必要がない場合は、あなただけにすることができます:
df = SparkContext.createDataFrame(data, schema = attribute_names)
またStructType
を作成し、スキーマ内の型を指定することができます。
jsonData
レコードのリストを、行として扱いたいと思うと思います。 これをオブジェクトのリストと見なしてみましょうが、論理は同じです。
data = [build_record(x, attribute_names) for x in my_object_list]
:
my_object_list = [
jsonDataClass(Serial = 1, InstrumentSerial = 'TDD', Country = 'France'),
jsonDataClass(Serial = 2, InstrumentSerial = 'TDI', Country = 'Suisse'),
jsonDataClass(Serial = 3, InstrumentSerial = 'TDD', Country = 'Grece')]
def build_record(obj, attr_names):
from operator import attrgetter
return attrgetter(*attr_names)(obj)
ので、データ属性が以前のように構成されます言及:あなたは以下のようにそれを行うことができます