PySpark新手求助:如何将指定CSV文件加载为DataFrame
解决PySpark加载CSV的问题
嘿,作为PySpark新手,加载CSV确实容易踩小坑,我来帮你把代码补全并解释清楚!
首先先理清楚你的CSV结构——你提供的内容看起来是粘贴时格式乱了,正确的格式应该是表头行+数据行的形式,比如:
article_id,title,short_desc
33,"novel findings support original asco-cap guidelines","support categorization of her2 by fish status used in bcirg clinical trials"
如果你的CSV是用空格分隔的,也没关系,后面代码里可以调整分隔符参数。
完整的CSV读取代码
from pyspark.sql import SparkSession from pyspark.sql.types import StructType, StructField, IntegerType, StringType # 初始化SparkSession,这部分你已经写对啦 spark = SparkSession.builder.appName('Basics').getOrCreate() # 补全自定义Schema,严格匹配你的列类型 schema = StructType([ # article_id是整数类型,设为不可为空(根据你的数据调整) StructField("article_id", IntegerType(), nullable=False), # title和short_desc是长文本,用StringType StructField("title", StringType(), nullable=True), StructField("short_desc", StringType(), nullable=True) ]) # 读取CSV文件,这里分两种情况: # 情况1:逗号分隔的标准CSV df = spark.read.csv( path="你的CSV文件路径.csv", # 替换成实际文件路径 schema=schema, header=True, # 告诉PySpark第一行是表头 multiLine=True # 处理包含空格的字段,避免被拆分 ) # 情况2:如果是空格分隔的CSV,把sep参数改成" " # df = spark.read.csv( # path="你的CSV文件路径.csv", # schema=schema, # header=True, # sep=" ", # multiLine=True # ) # 验证读取结果,truncate=False能显示完整文本 df.show(truncate=False)
关键注意点
- 自定义Schema的必要性:不要依赖PySpark自动推断类型,自定义Schema能确保
article_id被识别为整数,避免把它当成字符串处理,同时也能提升读取速度。 - 分隔符设置:一定要根据你的实际CSV分隔符调整
sep参数,默认是逗号,如果是空格分隔就改成" ",否则会出现列数不匹配的错误。 - multiLine参数:如果你的文本字段(比如title、short_desc)包含空格或者换行,这个参数能确保整个字段被正确读取,不会被拆分到多个列里。
内容的提问来源于stack exchange,提问作者Sriram Arvind Lakshmanakumar
相关产品推荐
相关产品推荐

