복붙노트

[SCALA] 아파치 스파크와 JSON 읽기 -`corrupt_record`

SCALA

아파치 스파크와 JSON 읽기 -`corrupt_record`

내가 JSON 파일이이 같은 그 모습 노드 :

[{"toid":"osgb4000000031043205","point":[508180.748,195333.973],"index":1}
,{"toid":"osgb4000000031043206","point":[508163.122,195316.627],"index":2}
,{"toid":"osgb4000000031043207","point":[508172.075,195325.719],"index":3}
,{"toid":"osgb4000000031043208","point":[508513,196023],"index":4}]

본인은 파이썬이 기록을 조작 할 수 있어요.

나는 스파크 쉘을 통해 스칼라에서이 파일을 읽으려고하고있다.

이 튜토리얼에서, 나는 sqlContext.read.json를 통해 JSON을 읽을 수 있음을 볼 수있다

val vfile = sqlContext.read.json("path/to/file/nodes.json")

그러나, corrupt_record 오류에서이 결과 :

vfile: org.apache.spark.sql.DataFrame = [_corrupt_record: string]

캔 사람이 오류에 도움이 되거? 본인은 다른 응용 프로그램과 파일을 사용하고 난 그것이 부패하고 소리 JSON되지 않습니다 확신 할 수 있습니다.

해결법

  1. ==============================

    1.당신이 통과 할 수 있도록 스파크, 최상위의 기록에 JSON 배열을 읽을 수 없습니다 :

    당신이 통과 할 수 있도록 스파크, 최상위의 기록에 JSON 배열을 읽을 수 없습니다 :

    {"toid":"osgb4000000031043205","point":[508180.748,195333.973],"index":1} 
    {"toid":"osgb4000000031043206","point":[508163.122,195316.627],"index":2} 
    {"toid":"osgb4000000031043207","point":[508172.075,195325.719],"index":3} 
    {"toid":"osgb4000000031043208","point":[508513,196023],"index":4}
    

    그것은 당신이 언급하고있는 튜토리얼에서 설명한 것 같이

    추론은 매우 간단합니다. 스파크는 (대략 말, 개체 당) 자신의 처리를 배포 할 수 있도록, JSON-기관의 많은 (한 줄에 엔티티)로 파일을 전달할 것으로 기대하고있다.

    거기에 더 많은 빛 말하면, 여기 견적 양식을 공식 문서입니다

    이 형식은 JSONL이라고합니다. 기본적으로는 CSV에 대한 대안입니다.

  2. ==============================

    2.DataFrame로 여러 줄 JSON을 읽으려면 :

    DataFrame로 여러 줄 JSON을 읽으려면 :

    val spark = SparkSession.builder().getOrCreate()
    
    val df = spark.read.json(spark.sparkContext.wholeTextFiles("file.json").values)
    

    이러한 방식으로 큰 파일을 읽는 것은 wholeTextFiles 워드 프로세서에서 사용하지 않는 것이 좋습니다

  3. ==============================

    3.스파크는 "JSON 라인 형식 '이 아닌 일반적인 JSON 형식을 예상하고, 우리는 지정하여 일반적인 JSON을 읽어 불꽃을 알 수 있습니다 :

    스파크는 "JSON 라인 형식 '이 아닌 일반적인 JSON 형식을 예상하고, 우리는 지정하여 일반적인 JSON을 읽어 불꽃을 알 수 있습니다 :

    val df = spark.read.option("multiline", "true").json("<file>")
    
  4. ==============================

    4.저도 같은 문제로 실행합니다. 나는 같은 구성에 sparkContext 및 sparkSql을 사용 :

    저도 같은 문제로 실행합니다. 나는 같은 구성에 sparkContext 및 sparkSql을 사용 :

    val conf = new SparkConf()
      .setMaster("local[1]")
      .setAppName("Simple Application")
    
    
    val sc = new SparkContext(conf)
    
    val spark = SparkSession
      .builder()
      .config(conf)
      .getOrCreate()
    

    : 파일 - 그럼, 스파크 컨텍스트를 사용하여 나는 (파일 경로 JSON)을 전체 JSON을 읽어

     val jsonRDD = sc.wholeTextFiles(JSON).map(x => x._2)
    

    당신은 미래의 선택에 대한 스키마를 만들 수 있습니다, 필터 ...

    val schema = StructType( List(
      StructField("toid", StringType, nullable = true),
      StructField("point", ArrayType(DoubleType), nullable = true),
      StructField("index", DoubleType, nullable = true)
    ))
    

    스파크 SQL을 사용하여 DataFrame 만들기 :

    var df: DataFrame = spark.read.schema(schema).json(jsonRDD).toDF()
    

    사용 쇼 printSchema을 테스트 :

    df.show()
    df.printSchema()
    

    SBT 빌드 파일 :

    name := "spark-single"
    
    version := "1.0"
    
    scalaVersion := "2.11.7"
    
    libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.2"
    libraryDependencies +="org.apache.spark" %% "spark-sql" % "2.0.2"
    
  5. from https://stackoverflow.com/questions/38895057/reading-json-with-apache-spark-corrupt-record by cc-by-sa and MIT license