Объект DataFrame не имеет атрибута withColumn - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь сравнить два кадра данных панд, но получаю ошибку, так как объект 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 - некоторые фреймы данных

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Потому что вы устанавливаете их как 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. Если вы хотите преобразовать DataFrames, используйте это:

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

spark = SparkSession.builder.appName('pandasToSparkDF').getOrCreate()
df = spark.createDataFrame(pd_df1)
0 голосов
/ 11 июля 2019

Я понял это. Спасибо за помощь.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...