【问题标题】:PySpark Error: StructType can not accept object 0 in type <type 'int'>PySpark 错误:StructType 不能接受类型 <type 'int'> 中的对象 0
【发布时间】:2019-09-16 05:17:55
【问题描述】:

我的数据文件与 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 &lt;type 'int'&gt; 我正在使用 Python 2.7,Spark > 2.0。分割线后,对象的类型是 Unicode 而不是字符串,这会有什么不同。如何解决这个问题。任何建议都会有很大帮助。谢谢

【问题讨论】:

    标签: python apache-spark pyspark pyspark-dataframes


    【解决方案1】:

    如果分隔符是“,”,则它只是一个普通的 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"),它会尝试通过查看数据来猜测文件结构。

    【讨论】:

    • 您好,谢谢您的回答。但问题是一些文件是 CSV,其他文件有“”作为分隔符。此外,我的本地系统具有 Spark > 2.0。我正在使用的远程集群有我无法升级的 Spark 1.6。这些是错误。在远程云上(Python 2.7、Spark 1.6、Graphframes 0.1.0):意外的元组 0 与 StructType 在我的 PC 上(Python 2.7、Spark 2.4、Graphframes 0.7.0):StructType 不能接受类型
    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 2021-06-27
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多