J'ai un dataframe qui a quelques colonnes comme ci-dessous:Comment modifier une valeur de cellule/s basée sur une condition dans Pyspark dataframe
category| category_id| bucket| prop_count| event_count | accum_prop_count | accum_event_count ----------------------------------------------------------------------------------------------------- nation | nation | 1 | 222 | 444 | 555 | 6677
Cette trame de données commence à partir de 0 lignes et chaque fonction de mon script ajoute une rangée à ceci.
Il existe une fonction qui doit modifier les valeurs de 1 ou 2 cellules en fonction des conditions. Comment faire ça?
code:
schema = StructType([StructField("category", StringType()), StructField("category_id", StringType()), StructField("bucket", StringType()), StructField("prop_count", StringType()), StructField("event_count", StringType()), StructField("accum_prop_count",StringType())])
a_df = sqlContext.createDataFrame([],schema)
a_temp = sqlContext.createDataFrame([("nation","nation",1,222,444,555)],schema)
a_df = a_df.unionAll(a_temp)
lignes ajoutées d'une autre fonction:
a_temp3 = sqlContext.createDataFrame([("nation","state",2,222,444,555)],schema)
a_df = a_df.unionAll(a_temp3)
maintenant à modifier, je suis en train de se joindre à une condition.
a_temp4 = sqlContext.createDataFrame([("state","state",2,444,555,666)],schema)
a_df = a_df.join(a_temp4, [(a_df.category_id == a_temp4.category_id) & (some other cond here)], how = "inner")
Mais ce code ne fonctionne pas. Je reçois une erreur:
+--------+-----------+------+----------+-----------+----------------+--------+-----------+------+----------+-----------+----------------+ |category|category_id|bucket|prop_count|event_count|accum_prop_count|category|category_id|bucket|prop_count|event_count|accum_prop_count| +--------+-----------+------+----------+-----------+----------------+--------+-----------+------+----------+-----------+----------------+ | nation| state| 2| 222| 444| 555| state| state| 2| 444| 555| 666| +--------+-----------+------+----------+-----------+----------------+--------+-----------+------+----------+-----------+----------------+
Comment résoudre ce problème? La sortie correcte doit avoir 2 lignes et la seconde ligne doit avoir une valeur mise à jour