,python,apache-spark,pyspark,pyspark-dataframes"/>

首页 > 解决方案 > PySpark 错误:StructType 不能接受类型中的对象 0

问题描述

我的数据文件与 Graph Edges 相关。每行的格式为(src node & dest node)。这是我的架构定义。 eschema = StructType([StructField("src", StringType(), True), StructField("dst", StringType(), True)]) 我试图阅读该行,用分隔符(',')将其拆分并将每个元素转换为一个 int。但这以某种方式失败了。

 lines = sc.textFile(filename)
 lines = lines.map(lambda l : map(int, l.split(delim)))
 lines = lines.map(lambda l : Row(l[0], l[1]))

运行此程序时,我收到错误 StructType can not accept object 0 in type <type 'int'> 我正在使用 Python 2.7,Spark > 2.0。分割线后,对象的类型是 Unicode 而不是字符串,这会有什么不同。如何解决这个问题。任何建议都会有很大帮助。谢谢

标签: pythonapache-sparkpysparkpyspark-dataframes

解决方案


如果分隔符是“,”,那么它只是一个普通的 csv 文件。由于您使用的是 Spark > 2.0,因此您可以使用现代数据框 api;您可以使用 spark 会话,而不是使用 spark 上下文(按照约定 sc):

df = spark.read.format("csv")\
    .option("header", "true")\ # if you have a header inside the file, otherwise don't put this line
    .option("schema", eschema)\ 
    .load(filename)

除了通过提供模式之外,.option("schema", )您还可以使用.option("inferSchema", "true")which 将尝试通过查看数据来猜测文件结构。


推荐阅读