Je cherche à extraire une chaîne d'une colonne de données XML (chaîne) dans My Pyspark Dataframe. Je cherche à extraire la valeur du nom du produit pour chaque client.
ci-dessous est un exemple de données: p>
Customer, ProductName A, 123;1452 B, 123 C, 123;1452;893;3453
3 Réponses :
Si votre structure XML est statique, remplacez simplement les chaînes XML environnantes avec ";" (Utilisez Remplacer ou Regexp_replace ), laissant les valeurs et créer une nouvelle colonne avec le résultat ( Sans column em> méthode). P>
Créer un UDF simple
import re
from pyspark.sql.functions import udf
extract = udf(lambda s: list(map(lambda x: x.split('=')[1] if len(x)>0 else x,re.findall('(ProductName=\"\d+\")', s))), ArrayType(StringType()))
df.withColumn('values', extract('Product')).show(30,False)
+--------+--------------------+--------------------+
|Customer| Product| values|
+--------+--------------------+--------------------+
| A|<XmlData ProductN...| ["123", "1452"]|
| B|<XmlData ProductN...| ["123"]|
| C|<XmlData ProductN...|["123", "1452", "...|
| D| | []|
+--------+--------------------+--------------------+
df = df.withColumn('values',f.concat_ws(';','values'))
dans SCALA -
val regexp_extractAll = udf((xml: String, exp: String) =>
exp.r.findAllMatchIn(xml).map(_.group(1)).mkString(";")
)
df.withColumn("ProductName", regexp_extractAll($"Product", lit("""ProductName="(\d+)"""")))
.show(false)
/**
* +--------+-----------------------------------------------------------------------------+--------+
* |Customer|Product |ProductName |
* +--------+-----------------------------------------------------------------------------+--------+
* |A |<XmlData ProductName="123">x</XmlData><XmlData ProductName="1452">y</XmlData>|123;1452|
* |B |<XmlData ProductName="123">x</XmlData> |123 |
* |C |<XmlData ProductName="123">x</XmlData><XmlData ProductName="1452">y</XmlData>|123;1452|
* +--------+-----------------------------------------------------------------------------+--------+
*/
Utilisez cette libère de Data Databicks - Github.com/databricks/spark-xml