我有一个pysparkDataframe,看起来像下面这样。我希望列只保存浮点值。请注意,当前值的周围有方括号。
from pyspark.sql.types import StructType,StructField
from pyspark.sql.types import StringType, IntegerType, ArrayType
data = [
("Smith","OH","[55.5]"),
("Anna","NY","[33.3]"),
("Williams","OH","[939.3]"),
]
schema = StructType([
StructField('name', StringType(), True),
StructField('state', StringType(), True),
StructField('salary', StringType(), True)
])
df = spark.createDataFrame(data = data, schema= schema)
df.show(truncate=False)
Input:
+--------+-----+-------+
|name |state|salary |
+--------+-----+-------+
|Smith |OH |[55.5] |
|Anna |NY |[33.3] |
|Williams|OH |[939.3]|
+--------+-----+-------+
结果应该是,
+--------+-----+------------------+
|name |state|float_value_salary|
+--------+-----+------------------+
|Smith |OH |55.5 |
|Anna |NY |33.3 |
|Williams|OH |939.3 |
+--------+-----+------------------+
谢谢你的帮助。
3条答案
按热度按时间xsuvu9jc1#
你可以
trim
方括号和铸造浮动:或者你可以用
from_json
要将其解析为float数组,并获取第一个数组元素:beq87vna2#
您可以使用正则表达式:
输出:
mklgxw1f3#
您需要使用自定义项将字符串解析为浮点数组,然后可以分解数组以获得数组中的奇异值。
方案如下:
输出Dataframe希望得到以下结果