Je veux obtenir le dernier élément du tableau qui revient de la fonction Spark SQL split ().

split(4:3-2:3-5:4-6:4-5:2,'-')

Je sais que ça peut s'en sortir

split(4:3-2:3-5:4-6:4-5:2,'-')[4]

Mais je veux une autre façon quand je ne connais pas la longueur du tableau. Aidez-moi, s'il vous plaît.

6
Dil 26 janv. 2017 à 09:51

4 réponses

Meilleure réponse

Vous pouvez utiliser un UDF pour ce faire, comme suit:

val df = sc.parallelize(Seq((1L,"one-last1"), (2L,"two-last2"), (3L,"three-last3"))).toDF("key","Value")
+---+-----------+
|key|Value      |
+---+-----------+
|1  |one-last1  |
|2  |two-last2  |
|3  |three-last3|
+---+-----------+

val get_last = udf((xs: Seq[String]) => Try(xs.last).toOption)

val with_just_last = df.withColumn("Last" , get_last(split(col("Value"), "-")))
+---+-----------+--------+
|key|Value      |Last    |
+---+-----------+--------+
|1  |one-last1  |last1   |
|2  |two-last2  |last2   |
|3  |three-last3|last3   |
+---+-----------+--------+

N'oubliez pas que la fonction split de SparkSQL peut être appliquée à une colonne du DataFrame.

2
pheeleeppoo 26 janv. 2017 à 15:46

Vous pouvez également utiliser la fonction SparkSql Reverse () sur une colonne après Split (). Par exemple:

SELECT reverse(split(MY_COLUMN,'-'))[0] FROM MY_TABLE

Ici [0] vous donne le premier élément du tableau inversé, qui est le dernier élément du tableau initial.

10
Mahdi Shahbaba 24 oct. 2018 à 16:50

Veuillez vérifier substring_index cela devrait fonctionner exactement comme vous le souhaitez:

substring_index(lit("1-2-3-4"), "-", -1) // 4
6
Valentin 11 janv. 2019 à 00:36

Utilisez split (MY_COLUMN, '-'). getItem (0) si vous utilisez Java

0
AjeetGiri 15 oct. 2019 à 20:28