У меня проблема с CSV-файлом, содержащим десятичное значение, подобное этому «7,27431439586819e-05».
spark.read.option("header", "true")\
.option("delimiter", ";")\
.option("locale", "fr-FR")\ *doesnt work...*
.option("inferSchema", "true")\
.csv("file.csv").toPandas()
Запятая не кажется стандартной запятой, и я не могу найти возможность указать символ (.option('decimal',',') не существует, .option('locale','fr-FR') не существует Работа)
Есть ли у вас какие-либо идеи ? Я также попробовал re.sub("[^0-9]", "."), а затем понял, что у меня есть научная ценность ('e-'), так что это тоже не работает.
Попробуйте использовать функцию regexp_replace() из pyspark, чтобы заменить "," на "." затем введите в DoubleType().
import pandas as pd
import pyspark.sql.functions as F
from pyspark.sql.types import DoubleType
df = pd.DataFrame({"Name": ['a', 'b', 'c'], "Measures":["7,27431439586819e-05", "15,4689439586819e-01", "-2,97431439586819e02"]})
dfs = spark.createDataFrame(df)
dfs_transformed = dfs.withColumn('Measures', F.regexp_replace('Measures', ',', '.').cast(DoubleType()))
dfs_transformed.show()
И вы должны получить правильно типизированные значения:
+----+-------------------+
|Name| Measures|
+----+-------------------+
| a|7.27431439586819E-5|
| b| 1.54689439586819|
| c| -297.431439586819|
+----+-------------------+