簡體   English   中英

在另一個 df 的架構定義中使用 df 的架構?

[英]Use the schema of a df in a schema definition for another df?

我有一個帶有這樣架構的 spark df:

print(df.schema)

StructType(List(StructField(column_info,ArrayType(StructType(List(StructField(column_datatype,StringType,true),StructField(column_description,StringType,true),StructField(column_length,StringType,true),StructField(column_name,StringType,true),StructField(column_personally_identifiable_information,StringType,true),StructField(column_precision,StringType,true),StructField(column_primary_key,StringType,true),StructField(column_scale,StringType,true),StructField(column_security_classifications,ArrayType(StringType,true),true),StructField(column_sequence_number,StringType,true))),true),true),StructField(file_code_page,StringType,true),StructField(file_delimiter,StringType,true),StructField(file_description,StringType,true),StructField(file_end_of_line_char,StringType,true),StructField(file_extension,StringType,true),StructField(file_footer_rows,StringType,true),StructField(file_header_rows,StringType,true),StructField(file_name,StringType,true),StructField(logs_id,StringType,true),StructField(metadata_version,StringType,true),StructField(oar_id,StringType,true),StructField(schema_version,StringType,true)))

我想在另一個 df 中使用這個模式。 為此,我手動調整以具有以下格式:

mdata_schema = StructType([\
                                  StructField('column_info',ArrayType(StructType([\
                                                                                    StructField('column_datatype',StringType(),True),\
                                                                                    StructField('column_description',StringType(),True),\
                                                                                    StructField('column_length',StringType(),True),\
                                                                                    StructField('column_name',StringType(),True),\
                                                                                    StructField('column_personally_identifiable_information',StringType(),True),\
                                                                                    StructField('column_precision',StringType(),True),\
                                                                                    StructField('column_primary_key',StringType(),True),\
                                                                                    StructField('column_scale',StringType(),True),\
                                                                                    StructField('column_security_classifications',ArrayType(StringType(),True),True),\
                                                                                    StructField('column_sequence_number',StringType(),True)]),True),True),\
                                  StructField('file_code_page',StringType(),True),\
                                  StructField('file_delimiter',StringType(),True),\
                                  StructField('file_description',StringType(),True),\
                                  StructField('file_end_of_line_char',StringType(),True),\
                                  StructField('file_extension',StringType(),True),\
                                  StructField('file_footer_rows',StringType(),True),\
                                  StructField('file_header_rows',StringType(),True),\
                                  StructField('file_name',StringType(),True),\
                                  StructField('logs_id',StringType(),True),\
                                  StructField('metadata_version',StringType(),True),\
                                  StructField('oar_id',StringType(),True),\
                                  StructField('schema_version',StringType(),True)\
                             ])

有沒有辦法避免這種手動調整? 是否有一種內置方法可以提取模式,以便我可以在另一個 df 中自動使用它?

正如其他人所說,如果您可以在筆記本中訪問該數據框,那么您可以讀取結構類型中的 df.schema.fields 並將其用作架構,否則您可以使用以下函數為第一個數據框生成字符串並將輸出字符串用作第二個數據框的架構

k=[]
for f in df.schema.fields:
  x=StructField('"'+f.name+'"',f.dataType,f.nullable)
  k.append(x)
print("StructType("+str(k).replace(",true","(),True").replace(",false","(),False")+")")

暫無
暫無

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

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