Pyspark spark.read.csv().collect() 返回一个空列表

Posted

技术标签:

【中文标题】Pyspark spark.read.csv().collect() 返回一个空列表【英文标题】:Pyspark spark.read.csv().collect() return an empty list 【发布时间】:2021-12-30 09:20:46 【问题描述】:

我一直在尝试使用df.collect() 方法在 pyspark 3.1.2 中查看我的单元格的内容 但它一直返回一个空列表: etp.collect() [] 尽管etp.show() 给了我结果

我正在使用的代码:

from pyspark.sql import SparkSession
spark = SparkSession\
    .builder\
    .appName('Read_csv')\
    .getOrCreate()

etp= spark.read.options(header=True)\
.options(delimiter=';')\
.options(inferschema='true')\
.csv("mypath\etp.csv")

etp.collect()

我试过更改分隔符,同样的问题/

我的目标是根据行号迭代单元格的内容,但如果我无法访问内容,那就没用了。 有什么我可以尝试或改变的想法吗?

提前致谢

编辑:我正在使用 jupyter 笔记本 编辑 2:我尝试过其他操作,例如 withColumn... 并且它们似乎有效。 Select().show() 也是。感觉 .collect() 已经改变了 但我找不到信息

【问题讨论】:

确认执行包含etp.collect()的单元格后看到的输出是[]? 嘿!是的,完全正确。 能否确认etp.count()是否返回值 是的,它确实返回 14 【参考方案1】:

以下面的 Dataframe 为例,它有一个独特的ROW_ID

+------+----+---+
|ROW_ID|NAME|AGE|
+------+----+---+
|     1|John| 50|
|     2|Anna| 32|
|     3|Josh| 41|
|     4|Paul| 98|
+------+----+---+

您可以使用以下命令访问第三行的name 单元格

df.where(df["ROW_ID"] == 3).collect()[0]["NAME"]

请随意使用以下代码重新创建此示例

from pyspark.sql import types

data = [ 
        [1, "John", 50],
        [2, "Anna", 32],
        [3, "Josh", 41],
        [4, "Paul", 98],
        ]

arr_schema = (types.StructType([
        types.StructField('ROW_ID', types.IntegerType()),
        types.StructField('NAME', types.StringType()),
        types.StructField('AGE', types.IntegerType()),
        ]))

df = spark.createDataFrame(data, schema=arr_schema)

df.where(df["ROW_ID"] == 3).collect()[0]["NAME"]

【讨论】:

如果您提供来自 df.show() 的数据样本,我将根据您正在使用的数据调整我的答案 嗨 Bredan,谢谢您的回答。我怀疑问题出在我安装的 anaconda 上,其他包的行为很奇怪。我明天将在虚拟环境中重新安装所有内容,我会再试一次,包括您的解决方案。我会在这里发帖提醒一下。问候 嘿,重新安装所有内容后,它现在可以按预期工作了。我现在真的不知道是什么导致了这个问题,但它已经修复了。【参考方案2】:

我怀疑安装错误。所以我卸载了anaconda,然后创建了一个虚拟环境,我只安装了我需要的包并且它可以工作。

【讨论】:

以上是关于Pyspark spark.read.csv().collect() 返回一个空列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在PySpark中调用python函数?

在 pyspark 中处理大数据的优化

pyspark读取csv文件multiLine选项不适用于具有换行符spark2.3和spark2.2的记录

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

Pyspark:将df写入具有特定名称的文件,绘制df

在 pyspark 中以 csv 格式读取 excel 文件