Remplacer les cordes à vide avec Aucun/valeurs null dans DataFrame

J'ai un Spark 1.5.0 DataFrame avec un mélange de null et des chaînes vides dans la même colonne. Je veux convertir toutes les chaînes vides dans toutes les colonnes de null (None, en Python). Le DataFrame peut avoir des centaines de colonnes, donc j'essaie d'éviter codée en dur manipulations de chaque colonne.

Voir ma tentative ci-dessous, ce qui entraîne une erreur.

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

## Create a test DataFrame
testDF = sqlContext.createDataFrame([Row(col1='foo', col2=1), Row(col1='', col2=2), Row(col1=None, col2='')])
testDF.show()
## +----+----+
## |col1|col2|
## +----+----+
## | foo|   1|
## |    |   2|
## |null|null|
## +----+----+

## Try to replace an empty string with None/null
testDF.replace('', None).show()
## ValueError: value should be a float, int, long, string, list, or tuple

## A string value of null (obviously) doesn't work...
testDF.replace('', 'null').na.drop(subset='col1').show()
## +----+----+
## |col1|col2|
## +----+----+
## | foo|   1|
## |null|   2|
## +----+----+
Non, il n'est pas revenir une liste. Elle renvoie d'un DataFrame. J'ai mis à jour la question avec un lien vers l'Étincelle de la documentation.
ce n'est pas un Python question! Spark DataFrames sont distribués structure de données utilisée généralement pour permettre lourds de l'analyse des données sur les données big data. Si vous êtes à la solution n'est pas adaptée.
Pour dire la vérité Pythonic lambda x: None if not x else x enveloppé avec udf serait très bien fonctionner 🙂
mais il a demandé à l'OP pour retourner une liste...

OriginalL'auteur dnlbrky | 2015-10-22