[英]How to convert floats to IntegerType using StructType in PySpark?
[英]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
。
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.