Apache spark 通过pyspark读取csv文件,在空白列中显示一些值

Apache spark 通过pyspark读取csv文件,在空白列中显示一些值,apache-spark,pyspark,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Spark Dataframe,Pyspark Sql,我有一个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 dataframe 我阅读和链接。但是他们帮不了我多少忙 我的代码部分。在代码的最后一行,我得到了错误 myFile=sc.textFile(myData.csv) h

我有一个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 dataframe

我阅读和链接。但是他们帮不了我多少忙

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

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

您需要使用模式匹配,并根据中的内容强制转换为所需的类型c@z-明星:谢谢你的评论!但我不明白你说的。我遵循这个()方法将数据转换为SQL dataframe。问题来了,当我试图创建“出租车临时”部分。在我的数据集中,最后一列是空的,我提到的数据类型是“float”。所以,它的意思是不能将“字符串”转换为“浮点”。好的。你能发布你的代码吗?我已经更新了主要问题中的代码段。你在逗号上划掉了数据,但是在你发布的数据中没有逗号