即使它是Hive表或HDFS文件,当Spark读取数据并创建数据帧时,我也在想RDD /数据帧中的分区数将等于HDFS中的部分文件数。但是,当我使用 Hive 外部表进行测试时,我可以看到该数字与 部件文件的数量 不同。数据帧中的分区数为 119。该表是一个 Hive 分区表,其中包含 150 个部分文件,最小文件大小为 30 MB,最大大小为 118 MB。那么是什么决定了分区的数量呢?
每个块的块大小为128MB。斯帕克将读取数据。假设您的配置单元表大小为 aprrox 14.8 GB,那么它将配置单元表数据划分为 128 MB 块,并生成 119 个分区。
另一方面,您的hive表被分区,因此分区列有150个唯一值。
因此,配置单元中的部件文件数和 spark 中的分区数没有链接。
我认为这个链接确实回答了我的问题。分区的数量取决于拆分的数量,拆分的数量取决于hadoop输入格式。https://intellipaat.com/community/7671/how-does-spark-partition-ing-work-on-files-in-hdfs
您可以通过设置Spark.sql.files.maxPartitionBytes
来控制Spark打包到单个分区中的字节数。默认值为128 MB,请参阅Spark Tuning。
我创建一个数据文件,导入一个大约8MB的csv文件,如下所示: 最后,我打印dataframe的分区数: 答案是2。
该问题与通过从Hive表中读取数据而创建的spark数据帧的分区数量相同 但我认为这个问题没有得到正确答案。请注意,问题是,当使用SparkSession对HIVE表执行sql查询而创建数据帧时,将创建多少个分区。sql方法。 IIUC,上面的问题不同于询问当执行诸如之类的代码直接从文件系统(可能是HDFS)加载数据时,将创建多少个分区。我认为后一个问题的答案由spark.sql.files.ma
我有以下制表符分隔的示例数据集: 我正在对此数据运行一些转换,最终数据位于spark dataset中。之后,我用“period”分区将该数据集写入s3。因为我也希望在s3文件中使用period,所以我正在从from period列创建另一列“datasetperiod”。 我的scala函数来保存TSV数据集。 在S3上保存数据集的Scala代码。为S3上的分区添加新列datasetPeriod
问题内容: 我正在尝试使用HiveCLI上的动态分区从另一个表创建一个新表。我正在从Hive官方Wiki学习,这里有以下示例: 但是我收到了这个错误: 失败:SemanticException [错误10065]: CREATE TABLE AS SELECT命令无法指定目标表的列列表 资料来源:https : //cwiki.apache.org/confluence/display/Hive/
对于分区的Avro配置单元表,在Avro模式中具有大写字符的字段名将被拉回为空。我想知道我是否缺少一些设置/解决方法,或者这只是一个配置单元上下文的错误。 我已经尝试过将以下内容添加到DDL中: …并设置spark.sql。区分大小写,对真/假敏感 Spark版本1.5.0 Hive版本1.1.0 您可以通过在 Hive 中运行以下 DDL 来重新创建问题: ...
这是将Spark dataframe保存为Hive中的动态分区表的后续操作。我试图在答案中使用建议,但无法在Spark 1.6.1中使用 任何推动这一进程的帮助都是感激的。 编辑:还创建了SPARK-14927