当前位置: 首页 > 知识库问答 >
问题:

使用spark shell中的spark CSV包读取CSV

万俟华辉
2023-03-14

我正在尝试使用spack-csv从spack-shell中的aws s3读取csv。

下面是我所做的步骤。使用下面的命令启动spack-shell

箱子/火花壳——包装com。数据块:spark-csv\u 2.10:1.2.0

在shell中,执行以下scala代码

scala> val hadoopConf = sc.hadoopConfiguration
scala> hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
scala> hadoopConf.set("fs.s3.awsAccessKeyId", "****")
scala> hadoopConf.set("fs.s3.awsSecretAccessKey", "****")

scala> val s3path = "s3n://bucket/sample.csv"
scala> val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load(s3path)

获取以下错误

java.io.IOException: No FileSystem for scheme: s3n
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
    at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:256)
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:228)
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:313)
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:207)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)

我在这里错过了什么?请注意,我可以使用

scala> sc.textFile(s3path)

同样的scala代码在databricks笔记本中也可以正常工作

在spark csv github中创建了一个问题。当我得到问题的答案时,我会在这里更新

共有1个答案

蒙勇
2023-03-14

对于URLs3n://bucket/sample。csv,必须设置s3n的所有属性。因此,设置以下属性使我能够使用spark CSV读取CSV

scala> val hadoopConf = sc.hadoopConfiguration
scala> hadoopConf.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
scala> hadoopConf.set("fs.s3n.awsAccessKeyId", "****")
scala> hadoopConf.set("fs.s3n.awsSecretAccessKey", "****")

参考https://github.com/databricks/spark-csv/issues/137

 类似资料:
  • 我试图读取一个名为“numbers.txt”的文件,该文件中填充了整数(每行一个整数,没有空行)。我想把数字放入一个数组,然后返回这个数组(method)。无法找到文件,因此返回null。如果我把文件“numbers.txt”和Class放在同一个文件夹中,它会工作,但我不知道如果我把“numbers.txt”文件放在resources文件夹中,为什么它不工作。我想可以把它放到那里吗?main只是

  • 所以我很容易地阅读了我的shapefile: 那么如果我做头部(形状,1),我会得到以下结果: 所以获取数据很简单,我只需创建$NAME,然后从数据中获取所有名称。 但是我不知道如何访问它说插槽“协弦”的地方,这就是我想要访问的…或者就此而言,我如何访问不在数据槽上的东西? 换句话说,我想读取shapefile并以一个等于1824583的变量结束,这是coords槽矩阵的左上角值。 有人能帮忙吗?

  • 当我使用opencsv读取csv文件时,它在字符串末尾遇到\时无法正常工作。它使字符串的"部分,而不是'\',因为我想。我想一定有什么方法可以添加另一个\,让它转义\字符?无需手动编辑csv文件。我找过了,但什么也没找到。 为了澄清我的问题,看起来是这样的: csv文件 我的代码看起来像这样(不是真的,但它显示了我的问题): 我想把它解析成一个String[],每行有4个元素,但是最后一行只解析成

  • 问题内容: 当我使用opencsv读取csv文件时,在字符串末尾遇到“ \”时,它无法正常工作。它使字符串的一部分成为“”,而不是我想要的“ \”。我猜必须使用某种方法来添加另一个“ \”以使其转义为“ \”字符吗?而 无需 手动编辑csv文件。我已搜索但未找到任何内容。 为了澄清我的问题,它看起来像这样: CSV文件 我的代码看起来像这样(不是真的,但是它显示了我的问题): 我希望将此解析为每行

  • 问题内容: 我有多个包含不同类型的txt文件的zip文件。如下所示: 如何使用pandas读取每个文件而不提取它们? 我知道每个zip文件是否为1个文件,我可以对read_csv使用压缩方法,如下所示: 任何有关如何执行此操作的帮助都将非常有用。 问题答案: 你可以传递到构建从包装成一个多文件一个CSV文件。 码: 将所有内容读入字典的示例:

  • 我有一个csv文件,如下所示: ... 我怎样才能在python中只读取列“AAA、DDD、FFF、GGG”并跳过标题?我想要的输出是一个元组列表,如下所示:[(1,4,3,20),(2,5,2,23),(4,6,1,22)]。我正在考虑稍后将这些数据写入SQLdatabase。 我参考了这篇文章:用csv模块从csv文件中读取特定的列?。但是我不认为这对我有什么帮助。因为我的. csv很大,有一