Я пишу программу для исправления значений столбцов базы данных (вход CSV) с числами, соединенными из источников данных varios.
Проблема состоит в том, что они имеют разделитель тысяч и десятичный разделитель, использующий точку "."
Например:
- 100.000.000 -> 10000000
- 9.000 -> 9000
- 0,600000 -> 0,6 (ДЕСЯТИЧНО)
- 12.000.000 -> 12000000
- 0.200000 -> 0,2 (ДЕЦИМАЛЬНО)
- 1.000 -> 1000
- 700.000 -> 700000
Я пробовал с условным регулярным выражением, но я не нашел правильный путь, поэтому мне пришлось сделать это в два этапа ('когда', и извлечение регулярного выражения):
import sys
from pyspark import SQLContext, SparkContext
from pyspark.sql.types import StructType,StructField,StringType,DateType,IntegerType
sc = SparkContext()
sqlContext = SQLContext(sc)
from pyspark.sql.functions import regexp_replace, regexp_extract, col, when
df3 = sqlContext.createDataFrame([["100.000.000"],["9.000"],["0.600000"],["12.000.000"],["0.200000"],["1.000"],["700.000"]],["SENSOR_VALUE"])
df3.show()
regexDotDig6 = "\.(\d\d\d\d\d\d)";
regexDotDig3 = "\.(\d\d\d)";
df3 = df3.withColumn("SENSOR_VALUE", when(regexp_extract(df3.SENSOR_VALUE, regexDotDig6,1) == "", regexp_replace(df3.SENSOR_VALUE, regexDotDig3, "$1")) .otherwise(df3.SENSOR_VALUE).cast('double'))
df3.show()
Есть ли способ сделать это в том же регулярном выражении, или более эффективным способом?