首页 文章

spark 2.x使用csv函数读取整数/双列作为字符串

提问于
浏览
0

我正在使用以下声明阅读spark中的csv .

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

当我检查spark数据帧时,一些整数和双列存储为数据帧中的字符串列 . 但是,所有列都不是这种情况 .

我检查了特定列的值,所有值都是double类型,但仍然是spark推断为StringType .

由于我正在加载大约1000列的CSV文件,因此也无法明确指定架构 .

任何建议/帮助将受到高度赞赏 .

问候,

Neeraj

1 回答

  • 0

    考虑到模式不会改变中间表(浮动将保持浮动通过行) . 您可以编写一个小脚本来自动投射它们:

    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])])
    

相关问题