'DataFrame'对象没有属性'withColumn'

时间:2019-07-11 11:38:02

标签: python pyspark

我正在尝试比较两个熊猫数据帧,但是由于“ DataFrame”对象没有属性“ withColumn”而出现错误。可能是什么问题?

import pandas as pd
import pyspark.sql.functions as F

pd_df=pd.DataFrame(df.dtypes,columns=['column','data_type'])
pd_df1=pd.DataFrame(df1.dtypes,columns=['column','data_type'])

pd.merge(pd_df,pd_df1, on='column', how='outer'
    ).withColumn(
    "result",
    F.when(F.col("data_type_x") == 'NaN','new attribute'.otherwise('old attribute')))
    .select(
    "column",
    "data_type_x",
    "data_type_y",
    "result"
    )

df和df1是一些数据帧

3 个答案:

答案 0 :(得分:1)

因为您将它们设置为Pandas DataFrames,而不是Spark DataFrames。对于与Pandas DataFrames的联接,您可能要使用

DataFrame_output = DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

运行此命令以了解它是什么DataFrame。

type(df)

要使用withColumn,您将需要Spark DataFrames。如果要转换DataFrame,请使用以下命令:

import pyspark
from pyspark.sql import SparkSession
import pandas as pd

spark = SparkSession.builder.appName('pandasToSparkDF').getOrCreate()
df = spark.createDataFrame(pd_df1)

答案 1 :(得分:0)

我知道了。感谢您的帮助。

def res(df):
    if df['data_type_x'] == df['data_type_y']:
        return 'no change'
    elif pd.isnull(df['data_type_x']):
        return 'new attribute'
    elif pd.isnull(df['data_type_y']):
        return 'deleted attribute'
    elif df['data_type_x'] != df['data_type_y'] and not pd.isnull(df['data_type_x']) and not pd.isnull(df['data_type_y']):
        return 'datatype change'

pd_merge['result'] = pd_merge.apply(res, axis = 1)

答案 2 :(得分:0)

你混淆了 Pandas 数据帧和 Spark 数据帧。

问题是熊猫 df 没有火花功能 withColumn