2017-03-16 1 views
0

Scala에서 Xml로드를 사용하여 XML 파일을 구문 분석하려고합니다. 그러나이 프로그램은 HDFS에서 입력 데이터를 읽을 수 없습니다. 로컬 파일 시스템에서만 읽을 수 있습니다.scala를 사용하여 HDFS에서 입력 xml 데이터 읽기

HDFS에서 입력 데이터를 읽는 방법을 알려주세요.

은 아래의 프로그램을 시도 : 사전에

import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import scala.collection.mutable.WrappedArray 
import scala.collection.immutable.HashMap 
import scala.collection.immutable.HashMap 
import scala.collection.immutable.HashMap 

object ProcessxmlInputFiles { 

    def main(args: Array[String]) { 
    val sc = new SparkContext(new SparkConf().setAppName("Parse XML Data").setMaster("local[*]")) 
    val rawRDD = xml.XML.load(args(0)) 
    rawRDD.child.foreach { x => 
     var dateTime = StringBuilder.newBuilder 
     x.child.foreach { x => 
      if ("header".equals(x.label)) { 
      dateTime.append(x.child(1).attribute("dateTime").get.toString()) 
      } 
      ... 
     } 
     ... 
     } 
     ... 
     sc.stop 
     } 
} 

감사합니다!

+0

인수로 귀하의 의견은 무엇인가에 대한 databricks lib 디렉토리를 사용할 수 있습니까? – FaigB

답변

0

당신은 xml

//imports 
import org.apache.spark.sql.SQLContext 
import org.apache.spark.sql.types.{StructType, StructField, StringType, DoubleType}; 

/define schema for xml 
val sqlContext = new SQLContext(sc) 
val customSchema = StructType(Array(
    StructField("_id", StringType, nullable = true), 
    StructField("column1", StringType, nullable = true), 
    StructField("column2", StringType, nullable = true))) 

//read xml file 
val df = sqlContext.read 
    .format("com.databricks.spark.xml") 
    .option("rowTag", "item") 
    .schema(customSchema) 
    .load("file.xml") //You can provide local file "file:///<path to your xml>" for hdfs "hdfs://<path to file>" 

//write the result 
val selectedData = df.select("column1", "_id") 
selectedData.write 
    .format("com.databricks.spark.xml") 
    .option("rootTag", "items") 
    .option("rowTag", "item") 
    .save("newfile.xml") 
+0

Hi Faig, 답변 해 주셔서 감사합니다. 여기 Dataframe을 사용하고 싶지 않습니다. – Khumar

+0

XML 로더 만 사용하여 처리하고 싶습니다. 논리는 준비가되어 있지만 HDFS에서 데이터를 가져 오지 않는 것이 걱정됩니다. XML 로더를 사용하여 HDFS에서 데이터를 읽는 방법은 없습니다 – Khumar

+0

파일 크기에 따라 접근 방식이 다를 수 있습니다. – FaigB