Spark 2.X使用CSV函数将整数/双列读取为字符串



我使用以下语句读取Spark中的CSV。

df = spark.read.csv('<CSV FILE>', header=True, inferSchema = True)

当我在Spark DataFrame中检查一些整数和双列被存储为DataFrame中的字符串列。但是,所有列都不是这种情况。

我已经检查了特定列的值,所有值均为双重类型,但仍然可以推断为stringType。

由于我正在加载大约1000列的CSV文件,因此也明确指定架构是不可行的。

任何建议/帮助都将不胜感激。

问:

neeraj

考虑该模式不会更改中台式(浮点将保持浮动在行中)。您可以编写一个小脚本以自动投射它们:

def isfloat(x):
    try:
        float(x)
    except :
        return False
    else:
        return True
line1 = df.head(1)[0]
df = df.select([c for c in df.columns if not isfloat(line1[c])] + [df[c].cast("float").alias(c) for c in df.columns if isfloat(line1[c])])

如果您认为第一行中没有足够的信息,则可以执行此操作

N = 10
def isfloat(c):
    try:
        [float(x) in c]
    except :
        return False
    else:
        return True
Nlines = df.limit(N).toPandas()
df = df.select([c for c in df.columns if not isfloat(Nlines[c])] + [df[c].cast("float").alias(c) for c in df.columns if isfloat(Nlines[c])])

最新更新