通过 pyspark 读取 csv 文件,列空白中有一些值



我有一个csv文件,看起来像这样

A B C
1 2 
2 4
3 2 5
1 2 3
4 5 6

当我将此数据读取到 Spark 中时,它将 C 列视为"字符串",因为前几行中有"空格"。

谁能告诉我如何在SQL数据帧中加载这个文件,以便c列保持整数(或浮点数)?

我使用" sc.textFile"将数据读取到Spark中,然后将其转换为SQL数据帧。

我读了这个和这个链接。但他们对我帮助不大。

我的代码部分。在代码的最后一行中,我收到错误。

myFile=sc.textFile(myData.csv)
header = myFile.first()
fields = [StructField(field_name, StringType(), True) for field_name in header.split(',')]
fields[0].dataType = FloatType()
fields[1].dataType = FloatType()
fields[2].dataType = FloatType()
schema = StructType(fields)
myFileCh = myFile.map(lambda k: k.split(",")).map(lambda p: (float(p[0]),float(p[1]),float(p[2])))

谢谢!

所以问题出在这种不安全的强制转换上。 您可以实现一个简短的函数,该函数将执行"安全"强制转换,并在强制转换为 FLOAD 失败时返回 Defult 值。

def safe_cast(val, to_type, default=None):
try:
    return to_type(val)
except ValueError:
    return default
safe_cast('tst', float) # will return None
safe_cast('tst', float, 0.0) # will return 0.0
myFileCh = myFile.map(lambda k: k.split(",")).map(lambda p: (safe_cast(p[0], float),safe_cast(p[1], float),safe_cast(p[2], float)))

相关内容

  • 没有找到相关文章

最新更新