我正在尝试比较两个熊猫数据帧,但是由于“ 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是一些数据帧
答案 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
。