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