我是Spark的新手,我正在尝试使用Spark从文件中读取CSV数据。以下是我正在做的:
sc.textFile('file.csv')
.map(lambda line: (line.split(',')[0], line.split(',')[1]))
.collect()
我希望这个调用会给我一个文件前两列的列表,但我遇到了以下错误:
索引器中第1行的文件“”:列表索引超出范围
虽然我的CSV文件不止一列。
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())
你确定所有的行都至少有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()
火花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文件发送,但不会生成下载