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

如何将具有多个字段的大型csv加载到Spark

乜昆
2023-03-14

新年快乐!!!

我知道以前也有人问过/回答过类似的问题,但我的问题不同:

我有100个字段和100MB的大尺寸csv,我想将其加载到Spark(1.6)进行分析,csv的标头看起来像附加的样本(只有一行数据)

非常感谢你。

更新1(美国东部时间2016年12月31日下午1:26):

我使用以下方法并能够加载数据(具有有限列的示例数据),但是,我需要自动将标头(来自csv)分配为DataFrame中的字段名称,但是,DataFrame看起来像:

>>> import csv
>>> rdd = sc.textFile('file:///root/Downloads/data/flight201601short.csv') 
>>> rdd = rdd.mapPartitions(lambda x: csv.reader(x))
>>> rdd.take(5) 
>>> df = rdd.toDF() 
>>> df.show(5) 

共有1个答案

赵献
2023-03-14

如评论中所述,您可以使用spark.read.csv火花2.0.0(https://spark.apache.org/docs/2.0.0/api/python/pyspark.sql.html)

df = spark.read.csv('your_file.csv', header=True, inferSchema=True)

将标头设置为True会将标头解析为数据帧的列名。将ferSchema设置为True将获取表架构(但会减慢读取速度)。

另请参见此处:使用Spark加载CSV文件

 类似资料:
  • 问题内容: 我正在使用SQL LOADER在一个表中加载多个csv文件。我发现的过程非常简单,就像 但是我不想多次使用INFILE,因为如果我有1000个以上的文件,那么我必须在控制文件脚本中提及1000次INFILE。 所以我的问题是:是否有其他方法(如任何循环/任何* .csv)加载多个文件而不使用多个infile? 谢谢你 问题答案: 解决方案1:您可以将1000个文件串联到一个大文件中,然

  • 下面是我想尝试使用java收集器编写的代码。 给定一个人的2个属性(firstname和lastname),我想获得一个包含唯一的firstname或lastname作为键的地图,以及相应的人的列表。 和填充映射的代码: 我不知道如何将firstname或lastname作为键(不像Java8中的Group by multiple field names)。我一定要写我自己的收藏家吗?

  • 问题内容: 我有一个包含三个字段(所有字符串类型)的“报告”对象列表- 我有一个排序代码,就像 由于某种原因,我没有排序顺序。一个建议在字段之间放置空格,但是为什么呢? 你认为代码有什么问题吗? 问题答案: 你认为代码有什么问题吗? 是。为什么在比较它们之前将三个字段加在一起? 我可能会做这样的事情:(假设字段按照你希望对其进行排序的顺序)

  • 问题内容: 我试图找到与当前正在查看的标签相关的标签。我们索引中的每个文档都被标记。每个标签由两部分组成-ID和文本名称: 要获取相关标签,我只是查询文档并获取其标签的集合: 这非常有效,我得到了想要的结果。但是,我需要标签ID 和 名称才能执行任何有用的操作。我已经探索了如何做到这一点,解决方案似乎是: 索引时合并字段 将字段拼凑在一起的脚本 嵌套聚合 选项1和2对我不可用,因此我一直在使用3,

  • 这工作得很完美,我得到了我想要的结果。但是,我需要标记ID和名称来做任何有用的事情。我已经探索了如何实现这一点,解决方案似乎是: 索引时合并字段 将字段集中在一起的脚本 嵌套聚合 选项一和选项二对我来说是不可用的,所以我一直在用3,但它没有以预期的方式做出反应。给定以下查询(仍在搜索还标记有“饼干”的文档): 我会得到这个结果: 嵌套聚合包括搜索项和我要搜索的标记(按字母顺序返回)。 我曾试图通过

  • 问题内容: 我有一个简单的模型,其中包括, 和领域。 在管理方面,可能在其他地方,我想显示为: 对我而言,执行此操作的逻辑位置是在模型中通过创建一个这样的计算字段: 最终,我认为我需要以字符串形式获取名称字段的值。我得到的错误是。字符串所需的值。我不知道这是什么意思。 一定有一种简单的方法可以做到这一点,我敢肯定我不是第一个想要这样做的人。 编辑:下面是我的代码修改为丹尼尔的答案。我得到的错误是: