簡體   English   中英

將 str 轉換為 pyspark.sql.types.StructType

[英]Convert a str into pyspark.sql.types.StructType

我已按企業提供了一個 .csv 文件,該文件已提交 MATERIAL_MASTER 文件的詳細信息。

| |另一個標題 | | -------- | -------------- | |第一 |行 | |第二 |行 |

在 Databricks 中,我創建了一個筆記本,我在其中讀取此文件並從中創建架構。

import pandas as pd
rows=[]
material_master_schema_df = spark.read.csv("/mnt/dentanalyticsdatalake/main-data/POC/RAW/MaterialMasterSchema.csv",header = True)
material_master_schema_df= material_master_schema_df.toPandas()
rows = material_master_schema_df.values.tolist()
#print(rows)

var= [ 'StructField'+str(tuple(i)) for i in rows]
#print(var)

fields = []
for i in var:
    fields.append(str(str(i.split(',')[0])+','+(i.split(',')[1].split("'")[1]+'Type()'+','+(i.split(',')[2].split("'")[1]+')'))))
    
#print(fields) 

Current_Schema = 'StructType'+'('+str(fields)+')'
material_master_schema = Current_Schema.replace('"','')

現在我正在嘗試在另一個筆記本中調用此筆記本並嘗試在創建 DataFrame 時使用此模式。

%run ./Schema_Creation_Notebook

MATERIAL_MASTER_TXT_DF = spark.read.csv("/xxx/file.txt",header = True, sep='\t',schema = material_master_schema )

但這向我拋出了“ParseException 錯誤”,我注意到類型(material_master_schema)是 str 而不是 StructType。

有人可以幫助我了解這種方法是否可行?

material_master_schema具有正確的 StructType 語法,但作為字符串。 所以,我們可以使用eval()函數來解決這個問題。 eval()函數將字符串表達式作為參數,並將其作為普通的 Python 代碼進行評估。 因此,在使用spark.read.csv()讀取 csv 時,將eval(material_master_schema)值分配給schema

  • 執行 Schema_Creation_Notebook 后 material_master_schema (String) 的值:
StructType([StructField('MATERIAL_MASTER_SURROGATE_KEY',StringType(),True), StructField('MATERIAL_NUMBER',StringType(),True), StructField('MATERIAL_FAMILY',StringType(),True)])
  • 使用eval()修改代碼:
from pyspark.sql.types import StructType,StructField,StringType

df = spark.read.csv("/xxx/file.txt", header=True, sep='\t', schema=eval(material_master_schema))
  • 輸出數據框的架構:
df.printSchema()

root
 |-- MATERIAL_MASTER_SURROGATE_KEY: string (nullable = true)
 |-- MATERIAL_NUMBER: string (nullable = true)
 |-- MATERIAL_FAMILY: string (nullable = true)

暫無
暫無

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

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