我们可以在从HDFS读取CSV文件时对其进行分区吗



我正试图将一个巨大的csv文件读取到spark中,并将其加载到雪花表中。要读取csv文件,我们在pyspark中有以下语法:

file_df = spark.read.format('csv').option('header', 'true').option('inferSchema', 'true').load('/tmp/dirpath/data/')

我的csv文件的架构:

schema = StructType([
        StructField("CUSTKEY", IntegerType(), True),
        StructField("NAME", StringType(), True),
        StructField("ADDRESS", StringType(), True),
        StructField("NATIONID", IntegerType(), True),
        StructField("PHONE", StringType(), True),
        StructField("ACCTBAL", DoubleType(), True),
        StructField("COMMENT", StringType(), True),
    ])

要从RDBMS表中读取数据,我们有以下语法:

yearDF = spark.read.format("jdbc").option("url", connectionUrl)
                       .option("dbtable", s"(${execQuery}) as year2016")
                       .option("user", devUserName)
                       .option("password", devPassword)
                       .option("partitionColumn","epochVals")
                       .option("lowerBound", minEp)
                       .option("upperBound", maxEp)
                       .option("numPartitions",15)
                       .load()

为了在从表读取时对数据进行分区,我们有选项partitionColumn,在这里我们可以指定分区列(这是一个旧的场景&我的数据属于配置单元表的单个分区(,其中列epochVals具有几乎唯一的值,参数numPartitions有助于将数据划分为精确数量的分区(15是用于解释场景的随机数(,spark有15个分区来排列数据。

现在我的csv文件大小为35GB。我们总是可以根据代码中的要求repartition一个数据帧,但spark中是否有在读取csv文件时对数据进行分区的选项?如果我已经知道CSV文件的模式和包含唯一值的列custkey,我可以使用spark.read.format('CSV'(语句中的partitionColumnnumpartitions参数吗?如果不是,我如何在加载csv文件后确定repartition数据的最佳分区数?有人能告诉我是否有可能按照我上面的要求去做吗?

回答问题的标题:不,如果使用spark.read,则没有。您需要在数据帧之后repartition

相关内容

  • 没有找到相关文章

最新更新