在HDFS中获取镶木地板文件的大小,以便在Scala中使用Spark进行重新分区

时间:2015-11-29 22:15:14

标签: scala hadoop apache-spark hdfs parquet

我在HDFS上有许多镶木地板文件目录,每个目录包含几千个小的(大多数<100kb)镶木地板文件。他们减慢了我的Spark工作,所以我想把它们结合起来。

使用以下代码,我可以将本地镶木地板文件重新分区为较少的部分:

val pqFile = sqlContext.read.parquet("file:/home/hadoop/data/file.parquet")
pqFile.coalesce(4).write.save("file:/home/hadoop/data/fileSmaller.parquet")

但我不知道如何通过编程方式通过Scala代码获取HDFS上目录的大小,因此我无法计算出传递给coalesce函数的分区数量真实的数据集。

我该怎么做?或者在Spark中有一种方便的方法,以便我可以配置编写器来编写固定大小的镶木地板分区吗?

1 个答案:

答案 0 :(得分:4)

你可以尝试

 class Program
    {
        static List<Card> userHand;
        static List<Card> dealerHand;
        static BlackJackDeck blackJackDeck;



        static void Main(string[] args)
        {

            blackJackDeck = new BlackJackDeck();
            blackJackDeck.shuffleCards();
            DealHand();
        }
        static void DealHand() {
            userHand = new List<Card>();
            userHand[0] = (blackJackDeck.addCard());
            userHand[1] = (blackJackDeck.addCard());
            Console.WriteLine("Card1: {0} of {1}", userHand[0].Face, userHand[0].Suit);
            Console.WriteLine("Card2: {0} of {1}", userHand[1].Face, userHand[1].Suit);
            Console.ReadLine();

        }
        }

根据文档返回“组成此DataFrame的文件的尽力而为快照”。

作为替代方案,直接在HDFS级别上:

pqFile.inputFiles.size

这样你也可以获得文件大小。