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读取csv文件multiLine选项不适用于具有换行符spark2.3和spark2.2的记录