在Pyspark中更改数据类型

时间:2017-08-08 12:32:19

标签: apache-spark pyspark spark-dataframe

我有一个数据框( input_dataframe ),其所有列的数据类型都是String,我有另一个数据框( output_dataframe ),其列名与 input_dataframe相同即可。我需要根据 output_dataframe 的数据类型来投射 input_dataframe 列。我在下面写了相同的代码:

code should be generic

我无法为Decimal数据类型处理它,因为Decimal数据类型类似于decimal(x,y)。有没有办法为十进制数据类型转换值。还有其他有效的方法来实现这个解决方案吗?

1 个答案:

答案 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)