Je veux prendre un fichier JSON et le mapper de sorte que l'une des colonnes soit une sous-chaîne d'une autre. Par exemple, prenons le tableau de gauche et produisons le tableau de droite:
------------ ------------------------
| a | | a | b |
|------------| -> |------------|---------|
|hello, world| |hello, world| hello |
Je peux le faire en utilisant la syntaxe spark-sql mais comment peut-on utiliser les fonctions intégrées?
Une telle déclaration peut être utilisée
import org.Apache.spark.sql.functions._
dataFrame.select(col("a"), substring_index(col("a"), ",", 1).as("b"))
Vous utiliseriez la fonction withColumn
import org.Apache.spark.sql.functions.{ udf, col }
def substringFn(str: String) = your substring code
val substring = udf(substringFn _)
dataframe.withColumn("b", substring(col("a"))
Supposons que vous ayez le dataframe suivant:
import spark.implicits._
import org.Apache.spark.sql.functions._
var df = sc.parallelize(Seq(("foobar", "foo"))).toDF("a", "b")
+------+---+
| a| b|
+------+---+
|foobar|foo|
+------+---+
Vous pouvez créer une nouvelle colonne à partir de la première colonne comme suit:
df = df.select(col("*"), substring(col("a"), 4, 6).as("c"))
+------+---+---+
| a| b| c|
+------+---+---+
|foobar|foo|bar|
+------+---+---+
Juste pour enrichir les réponses existantes. Au cas où vous seriez intéressé par la partie droite de la colonne de chaîne. C'est:
------------ ------------------------
| a | | a | b |
|------------| -> |------------|---------|
|hello, world| |hello, world| world |
Vous devriez utiliser un index négatif:
dataFrame.select(col("a"), substring_index(col("a"), ",", -1).as("b"))