【问题标题】:Error while exporting spark sql dataframe to csv将 spark sql 数据帧导出到 csv 时出错
【发布时间】:2017-04-15 20:46:04
【问题描述】:

我参考了以下链接以了解如何在 python 中导出 spark sql 数据帧

我的代码:

df = sqlContext.createDataFrame(routeRDD, ['Consigner', 'AverageScore', 'Trips'])
df.select('Consigner', 'AverageScore', 'Trips').write.format('com.databricks.spark.csv').options(header='true').save('file:///opt/BIG-DATA/VisualCargo/output/top_consigner.csv')

我使用 spark-submit 加载作业,并在主 url 上传递以下 jars

spark-csv_2.11-1.5.0.jar, commons-csv-1.4.jar

我收到以下错误

df.select('Consigner', 'AverageScore', 'Trips').write.format('com.databricks.spark.csv').options(header='true').save('file:///opt/BIG-DATA/VisualCargo/output/top_consigner.csv')
      File "/opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p0.11/lib/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py", line 332, in save
      File "/opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p0.11/lib/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
      File "/opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p0.11/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 36, in deco
      File "/opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p0.11/lib/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value
    py4j.protocol.Py4JJavaError: An error occurred while calling o156.save.


py4j.protocol.Py4JJavaError: An error occurred while calling o156.save.
    : java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
        at com.databricks.spark.csv.util.CompressionCodecs$.<init>(CompressionCodecs.scala:29)
        at com.databricks.spark.csv.util.CompressionCodecs$.<clinit>(CompressionCodecs.scala)
        at com.databricks.spark.csv.DefaultSource.createRelation(DefaultSource.scala:198)
        at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:170)
        at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:146)
        at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:137)
        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:231)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
        at py4j.Gateway.invoke(Gateway.java:259)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:207)
        at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 对我来说看起来像是 jar 冲突。可能是 CSV 编写器的一些依赖项。
  • @LiMuBei Scala 版本冲突

标签: apache-spark pyspark apache-spark-sql spark-csv


【解决方案1】:

我在 Windows 上运行 Spark,但遇到了无法写入文件(CSV 或 Parquet)的类似问题。在阅读更多 Spark 网站后,我发现了以下错误,这是因为我使用的是 winutils 版本。我将其更改为 64 位,它工作。希望这对某人有所帮助。 Spark Log

【讨论】:

    【解决方案2】:

    Spark 版本 1.5.0-cdh5.5.1 使用 Scala 2.10 构建 - Spark 2.11-1.5.0.jar。

    请将 spark-csv 更新到 Scala 2.10 版本或将 Spark 更新到 Scala 2.11。您将通过 artifactId 后的数字知道 Scala 版本,即 spark-csv_2.10-1.5.0 将用于 Scala 2.10

    【讨论】:

    • spark版本:1.5.0-cdh5.5.1版
    • @Hardik 是的,所以这是 Scala 冲突。请将 spark-csv 版本更新(降级)到 2.10 版本 - search.maven.org/…
    • @Hardik 的顺序必须不同 - 首先是 repartition,然后是 write,正如我在之前的评论中所写的那样
    • @Hardik 这就是 HadoopFileFormat 的工作原理,Spark 使用它来写入文件。在文件夹中,每个分区将有 1 个文件
    • @Hardik 如果将其写入普通存储,则可以使用标准 Java File API 或mv 命令。在 HDFS 中,您可以使用 hdfs dfs -mv 或 Hadoop File API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2022-12-12
    • 1970-01-01
    • 2021-01-16
    • 2023-03-30
    • 2014-07-26
    • 2016-05-27
    相关资源
    最近更新 更多