【问题标题】:Reading csv file through pyspark with some values in column blank通过pyspark读取csv文件,列空白
【发布时间】:2016-05-24 10:24:51
【问题描述】:

我有一个 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 数据帧。

我阅读了thisthis 链接。但他们对我帮助不大。

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

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

谢谢!

【问题讨论】:

  • 您需要使用模式匹配并根据 c 中的内容强制转换为所需的类型
  • @z-star:感谢您的评论!但我没听懂你在说什么。我正在按照这个 (nodalpoint.com/…) 方法将我的数据转换为 SQL 数据框。当我尝试创建“taxi_temp”部分时,问题就来了。在我的数据集中,最后一列是空白的,我提到数据类型为“float”。所以,它说不能将“字符串”转换为“浮点数”。
  • 好的。你能发布你的代码吗?
  • 我已经更新了主要问题中的代码 sn-p。
  • 您将数据洒在逗号上,但您发布的数据中没有逗号

标签: apache-spark pyspark spark-dataframe pyspark-sql


【解决方案1】:

所以问题在于这种不安全的转换。您可以实现一个简短的函数,该函数将执行“安全”转换并在转换为 fload 失败的情况下返回一个默认值。

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

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多