读隐含小数点的固定长度文件?

时间:2017-12-15 20:35:19

标签: pyspark spark-dataframe

假设我有一个这样的数据文件:

foo12345
bar45612

我想将其解析为:

+----+-------+
|  id|    amt|
+----+-------+
| foo| 123.45|
| bar| 456.12|
+----+-------+

也就是说,我需要选择df.value.substr(4,5).alias('amt'),但我希望将值解释为五位数,其中最后两位数位于小数点后面。

当然,除了“除以100”之外,还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

希望这有帮助!

from pyspark.sql.functions import substring, concat, lit
from pyspark.sql.types import DoubleType

#sample data
df = sc.parallelize([
    ['foo12345'],
    ['bar45612']]).toDF(["value"])

df = df.withColumn('id', substring('value',1,3)).\
    withColumn('amt', concat(substring('value', 4, 3),lit('.'),substring('value', 7, 2)).cast(DoubleType()))
df.show()

输出是:

+--------+---+------+
|   value| id|   amt|
+--------+---+------+
|foo12345|foo|123.45|
|bar45612|bar|456.12|
+--------+---+------+