我有一个数据框( input_dataframe ),其所有列的数据类型都是String,我有另一个数据框( output_dataframe ),其列名与 input_dataframe相同即可。我需要根据 output_dataframe 的数据类型来投射 input_dataframe 列。我在下面写了相同的代码:
code should be generic
我无法为Decimal数据类型处理它,因为Decimal数据类型类似于decimal(x,y)。有没有办法为十进制数据类型转换值。还有其他有效的方法来实现这个解决方案吗?
答案 0 :(得分:3)
我尝试了两种数据类型,包括十进制类型。请检查您的数据框,
>>> df.printSchema()
root
|-- col1: integer (nullable = true)
|-- col2: decimal(10,0) (nullable = true)
>>> df1.printSchema()
root
|-- col1: string (nullable = true)
|-- col2: string (nullable = true)
>>> df_schema = {field.name:field.dataType for field in df.schema.fields}
>>> dfSchema
{'col2': DecimalType(10,0), 'col1': IntegerType}
>>> df1_cols = df1.columns
>>> df1_cols
['col1', 'col2']
>>> for f in df1_cols:
df1 = df1.withColumn(f,df1[f].cast(df_schema[f]))
>>> df1.printSchema()
root
|-- col1: integer (nullable = true)
|-- col2: decimal(10,0) (nullable = true)