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

使用Spark加载CSV文件

耿珂
2023-03-14

我是Spark的新手,我正在尝试使用Spark从文件中读取CSV数据。以下是我正在做的:

sc.textFile('file.csv')
    .map(lambda line: (line.split(',')[0], line.split(',')[1]))
    .collect()

我希望这个调用会给我一个文件前两列的列表,但我遇到了以下错误:

索引器中第1行的文件“”:列表索引超出范围

虽然我的CSV文件不止一列。

共有3个答案

方航
2023-03-14
from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

df = spark.read.csv("/home/stp/test1.csv",header=True,sep="|")

print(df.collect())
东郭阳德
2023-03-14

你确定所有的行都至少有2列吗?你能试试这样的东西吗,只是为了检查一下?:

sc.textFile("file.csv") \
    .map(lambda line: line.split(",")) \
    .filter(lambda line: len(line)>1) \
    .map(lambda line: (line[0],line[1])) \
    .collect()

或者,您可以打印罪犯(如果有):

sc.textFile("file.csv") \
    .map(lambda line: line.split(",")) \
    .filter(lambda line: len(line)<=1) \
    .collect()
叶坚
2023-03-14

火花2.0.0

您可以直接使用内置csv数据源:

spark.read.csv(
    "some_input_file.csv", 
    header=True, 
    mode="DROPMALFORMED", 
    schema=schema
)

(
    spark.read
    .schema(schema)
    .option("header", "true")
    .option("mode", "DROPMALFORMED")
    .csv("some_input_file.csv")
)

不包括任何外部依赖项。

火花

我建议使用spark csv进行手动解析,而不是一般情况下的简单解析:

确保Spark CSV包含在路径中(--程序包、--jars、--驱动程序类路径)

并按如下方式加载数据:

df = (
    sqlContext
    .read.format("com.databricks.spark.csv")
    .option("header", "true")
    .option("inferschema", "true")
    .option("mode", "DROPMALFORMED")
    .load("some_input_file.csv")
)

它可以处理加载、模式推理、删除格式错误的行,并且不需要将数据从Python传递到JVM。

注:

如果您知道模式,最好避免模式推理并将其传递给DataFrameReader。假设您有三列-整数、双精度和字符串:

from pyspark.sql.types import StructType, StructField
from pyspark.sql.types import DoubleType, IntegerType, StringType

schema = StructType([
    StructField("A", IntegerType()),
    StructField("B", DoubleType()),
    StructField("C", StringType())
])

(
    sqlContext
    .read
    .format("com.databricks.spark.csv")
    .schema(schema)
    .option("header", "true")
    .option("mode", "DROPMALFORMED")
    .load("some_input_file.csv")
)

 类似资料:
  • csv文件中的每一行结构如下:

  • 在此输入图像说明 error_------------------------------------------------------------Py4JJavaError Traceback(最近调用last)in()---->1 sparkDF=sqlcontext.read.format('com.databricks.spark) /home/ec2-user/spark/python

  • 我试图加载一个csv文件内基于熊猫的数据帧。我使用了以下导入。 没有找到文件是抛出错误,回溯如下: ()中的FileNotFoundError回溯(最近一次调用)---- c:\users\saish\appdata\local\programs\python\python35-32\lib\site packages\pandas\io\parsers。语法分析器中的py\u f(文件路径或缓冲

  • 我收到了这个错误消息: 谢谢你的任何建议。

  • 问题内容: 我正在尝试为我的网站完成一个相当简单的任务,但是我不确定该如何去做。我希望用户查看表格,然后单击一个按钮,此时用户可以保存该表的内容作为csv文件。此请求有时可能非常复杂,因此我生成了一个进度页来提醒用户。 除了实际生成csv文件之外,我已经弄清了大多数东西。(我使用jQuery和PHP) jQuery代码在单击时运行: 相关的PHP: 这样做是将文本作为PHP文件发送,但不会生成下载