diff --git a/assembly/pom.xml b/assembly/pom.xml
index d19f44d292b7f1651c80b8b0b0a25b2fb1bccf11..808a829e192615f3fc2666fcca3576951c97cf52 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -103,6 +103,12 @@
               <goal>shade</goal>
             </goals>
             <configuration>
+              <transformers>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                  <resource>META-INF/services/org.apache.hadoop.fs.FileSystem</resource>
+                </transformer>
+              </transformers>
               <transformers>
                 <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                 <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
diff --git a/project/SparkBuild.scala b/project/SparkBuild.scala
index a60b553b5a9d933a3fe74f4ab8182c35907bdc8b..0736ec3ab78e98bf2702336cf07bb744bbe069cf 100644
--- a/project/SparkBuild.scala
+++ b/project/SparkBuild.scala
@@ -303,6 +303,7 @@ object SparkBuild extends Build {
     mergeStrategy in assembly := {
       case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
       case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
+      case "META-INF/services/org.apache.hadoop.fs.FileSystem" => MergeStrategy.concat
       case "reference.conf" => MergeStrategy.concat
       case _ => MergeStrategy.first
     }