spark:如何用“;”读取csv作为分隔符和“,”作为小数点分隔符?

spark : how to read csv with ";" as delimiter and "," as decimal separation?

我的 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-') 所以它也不起作用。

尝试使用 pyspark 中的 regexp_replace() 函数将“,”替换为“.”然后投射到 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|
 +----+-------------------+