J'ai créé un ensemble de données dans Spark en utilisant Java en lisant un fichier csv. Voici mon ensemble de données initial:
+---+-----+ |_c0| _c2| +---+-----+ | 1|NANDU| | 2| SANU| | 3| MANU| | 4|VEENA| +---+-----+
Je souhaite créer un dataframe comme suit (une colonne ayant des valeurs nulles):
Dataset<Row> ds = spark.read().format("csv").option("header", "false").load("/home/nandu/Data.txt"); Column [] selectedColumns = new Column[2]; selectedColumns[0]= new Column("_c0"); selectedColumns[1]= new Column("_c2"); ds2 = ds.select(selectedColumns);
Voici mon code existant:
+---+----+--------+ |_c0| _c1| _c2| +---+----|--------+ | 1|null| NANDU| | 2|null| SANU| | 3|null| MANU| | 4|null| VEENA| +---+----|--------+
qui créera l'ensemble de données comme suit.
+---+----------+-----+---+ |_c0| _c1| _c2|_c3| +---+----------+-----+---+ | 1|9090999999|NANDU| 22| | 2|9999999999| SANU| 21| | 3|9999909090| MANU| 22| | 4|9090909090|VEENA| 23| +---+----------+-----+---+
3 Réponses :
Pour sélectionner les deux colonnes souhaitées et en ajouter une nouvelle avec des valeurs nulles, vous pouvez utiliser ce qui suit:
import org.apache.spark.sql.functions.*; import org.apache.spark.sql.types.StringType; ds.select({col("_c0"), lit(null).cast(DataTypes.StringType).as("_c1"), col("_c2")});
Essayez de suivre le code
import org.apache.spark.sql.functions.{ lit => flit} import org.apache.spark.sql.types._ val ds = spark.range(100).withColumn("c2",$"id") ds.withColumn("new_col",flit(null: String)).selectExpr("id","new_col","c2").show(5)
J'espère que cela vous aidera
Cheers :)
L'ajout d'une nouvelle colonne avec une valeur de chaîne nulle peut résoudre le problème. Essayez le code suivant bien qu'il soit écrit en scala mais vous aurez l'idée:
import org.apache.spark.sql.functions.lit import org.apache.spark.sql.types.StringType val ds2 = ds.withColumn("new_col", lit(null).cast(StringType)).selectExpr("_c0", "new_col as _c1", "_c2")