我有一个字符串列,需要根据与它关联的名称将它的值提取到多个列中。
otherPartofString State DALLocate_SFO-4/3/9 sub Area=<8> ID 8 Name 7
需要从上面形成的柱是
State | Area | Sub Area | ID | Name DALLocate | SFO-4/3/9 | 8 | 8 | 7
感谢您的帮助。
wmvff8tz1#
如果模式总是固定的,您可以使用regexp\u extract:
from pyspark.sql.functions import regexp_extract df = spark.createDataFrame([{"raw": "otherPartofString State DALLocate_SFO-4/3/9 sub Area=<8> ID 8 Name 7 "}], 'raw string') (df .select(regexp_extract('raw', 'State ([^_]*)', 1).alias('State'), regexp_extract('raw', 'State ([a-zA-Z]*)_([^ ]*)', 2).alias('Area'), regexp_extract('raw', 'Area=<(.*)>', 1).alias('Sub Area'), regexp_extract('raw', 'ID ([^ ]*)', 1).alias('ID'), regexp_extract('raw', 'Name ([^ ]*)', 1).alias('Name')).show()) ``` `regexp_extract` 获取3个参数,第一个参数是要匹配的列。第二个是模式,第三个是要提取的组。 裁判:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.regexp_extract
2izufjch2#
试试这个:
import org.apache.spark.sql.functions.udf def myFunc: String => Array[String] = s => Array(/* TODO parse the string as you wish */) val myUDF = udf(myFunc) df.withColumn("parsedInput", myUDF(df("input"))) .select( $"parsedInput"(0).as("State"), $"parsedInput"(1).as("Area"), $"parsedInput"(2).as("Sub Area"), $"parsedInput"(3).as("ID"), $"parsedInput"(4).as("Name"))
其中“input”是您的原始输入(例如,“otherpartofstring state dallogate\u sfo-4/3/9 sub area=<8>id 8 name 7”)。确保您的自定义项返回一个有效的数组(项目数和顺序)
2条答案
按热度按时间wmvff8tz1#
如果模式总是固定的,您可以使用regexp\u extract:
2izufjch2#
试试这个:
其中“input”是您的原始输入(例如,“otherpartofstring state dallogate\u sfo-4/3/9 sub area=<8>id 8 name 7”)。
确保您的自定义项返回一个有效的数组(项目数和顺序)