在 pyspark 中的简单 .first()、.count() 中出现错误,

Posted

技术标签:

【中文标题】在 pyspark 中的简单 .first()、.count() 中出现错误,【英文标题】:getting error in simple .first(), .count() in pyspark, 【发布时间】:2019-12-23 14:36:47 【问题描述】:

我在 windows10 jupyter notebook 上运行以下代码,

airline= 'C:\spark-3.0.0-preview-bin-hadoop2.7\airlines.csv'
airlines = sc.textFile(airline)
print(airlines)

C:\spark-3.0.0-preview-bin-hadoop2.7irlines.csv MapPartitionsRDD[1] at textFile at NativeMethodAccessorImpl.java:0

(这给了我正确的输出)

当我尝试运行print(airlines.first()) 我收到错误:

Py4JJavaError                             Traceback (most recent call last)
<ipython-input-13-36bc0976264b> in <module>
----> 1 print(airlines.first())
.
.
.
Py4JJavaError: An error occurred while calling o30.partitions.
: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/C:/spark-3.0.0-preview-bin-hadoop2.7irlines.csv
    at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:287)
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229)
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315)
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:205)
    at org.apache.spark.rdd.RDD.$anonfun$partitions$2(RDD.scala:276)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:272)
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:49)
    at org.apache.spark.rdd.RDD.$anonfun$partitions$2(RDD.scala:276)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:272)
    at org.apache.spark.api.java.JavaRDDLike.partitions(JavaRDDLike.scala:61)
    at org.apache.spark.api.java.JavaRDDLike.partitions$(JavaRDDLike.scala:61)
    at org.apache.spark.api.java.AbstractJavaRDDLike.partitions(JavaRDDLike.scala:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:282)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)

【问题讨论】:

这里的sc 是什么? Spark 很懒惰。这意味着在需要文件之前不会加载文件。因此,您的第一条语句不会导致任何错误,它不会加载文件。一旦您调用collectfirsttoPandasshow 或任何其他“Action”,将执行所需的“转换”,例如sc.textFile。该错误只是说明您的文件在给定的输入路径上不存在。看起来很容易解决! @akshat, sc 是 spark 上下文对象的默认值 【参考方案1】:

我认为您提供的输入路径是正确的。如果没有,您必须对其进行审查。进一步在您的代码中进行以下更正:

代替:

airline= 'C:\spark-3.0.0-preview-bin-hadoop2.7\airlines.csv'

如下写:

airline= 'C:\\spark-3.0.0-preview-bin-hadoop2.7\\airlines.csv'

(或)

airline= 'C:/spark-3.0.0-preview-bin-hadoop2.7/airlines.csv'

代替:

print(airlines)

如下写:

   for i in airline.take(10): print (i)

(或)

   for i in airline.collect(): print (i)

注意:仅当您的文件较小时才使用 collect(),否则使用 take(n),其中 n 是整数。

【讨论】:

谢谢Sri_Karthik,制作(双\)帮助了我【参考方案2】:

我无法发表评论,所以我必须使用答案提出这个简单的问题:

你确定你写在变量中的路径是正确的吗?看消息似乎不是这样:

..hadoop2.7irlines.csv /ai" 不见了?

【讨论】:

以上是关于在 pyspark 中的简单 .first()、.count() 中出现错误,的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:groupby 和聚合 avg 和 first 在多个列上

在 PySpark 中的文字列上检测到 INNER 连接的笛卡尔积

pyspark 是不是支持窗口函数(例如 first、last、lag、lead)?

当我在 Windows 7 中运行“first”或“take”方法时 pyspark 崩溃

执行连接在多个按键pyspark只有非重复相同的列名

在 csv 文件中查找行的最大值,同时排除 pyspark 中的标题