PySpark 1.6: DataFrame: Conversion d'une colonne de chaîne float/double
Dans PySpark 1.6 DataFrame actuellement il n'y a pas d'Étincelle builtin de la fonction de convertir de la chaîne d'float/double.
Assumer, nous avons un RDD ('house_name', 'prix') avec les deux valeurs de chaîne. Vous souhaitez convertir, prix à partir de la chaîne de flotter.
Dans PySpark, nous pouvons appliquer la carte et python fonction de flottaison pour atteindre cet objectif.
New_RDD = RawDataRDD.map(lambda (house_name, price): (house_name, float(x.price)) #it works
Dans PySpark 1.6 Dataframe, il ne fonctionne pas:
New_DF = rawdataDF.select('house name', float('price')) #did not work
Jusqu'à ce qu'un construit en Pyspark fonction disponible, comment obtenir cette conversion avec un UDF?
J'ai développé cette conversion de l'UDF, comme suit:
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
def string_to_float(x):return float(x)
udfstring_to_float = udf(string_to_float, StringType())
rawdata.withColumn("house name",udfstring_to_float("price") )
Est-il un meilleur moyen beaucoup plus simple pour atteindre le même?
OriginalL'auteur Sohel Khan | 2016-02-28
Vous devez vous connecter pour publier un commentaire.
Selon la la documentation, vous pouvez utiliser le
cast
fonction sur une colonne comme ceci:AttributeError: 'DoubleType' object has no attribute 'alias'
Avez-vous de l'importation
from pyspark.sql.types import DoubleType
? Je suis sûr que j'ai testé cela sur PySpark 1.6 avant de poster.CORRIGÉ: Doit être
rawdata.withColumn("house name",rawdata["price"].cast(DoubleType()).alias("price")
au lieuOriginalL'auteur Jaco