복붙노트

[HADOOP] Spark에서 열 머리글을 지정하고 사용하는 방법?

HADOOP

Spark에서 열 머리글을 지정하고 사용하는 방법?

나는 아래와 같이 데이터 세트를 읽는다.

 f = sc.textFile("s3://test/abc.csv")

내 파일에는 50 개 이상의 필드가 있으며 각 필드의 열 머리글을 내 스크립트의 뒷부분에서 참조하도록 지정합니다.

PySpark에서 어떻게 할 수 있습니까? DataFrame은 여기로 갈 수 있습니까?

PS - 불꽃을 초보자.

해결법

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

    1.DataFrame을 사용하여 열 이름을 추가하는 방법은 다음과 같습니다.

    DataFrame을 사용하여 열 이름을 추가하는 방법은 다음과 같습니다.

    csv에 구분 기호 ','가 있다고 가정합니다. 데이터를 DataFrame으로 전송하기 전에 다음과 같이 준비하십시오.

    f = sc.textFile("s3://test/abc.csv")
    data_rdd = f.map(lambda line: [x for x in line.split(',')])
    

    데이터에 3 개의 열이 있다고 가정합니다.

    data_rdd.take(1)
    [[u'1.2', u'red', u'55.6']]
    

    이제 toDF ()를 사용하여이 RDD를 DataFrame으로 전송할 때 열 이름을 지정할 수 있습니다.

    df_withcol = data_rdd.toDF(['height','color','width'])
    
    df_withcol.printSchema()
    
        root
         |-- height: string (nullable = true)
         |-- color: string (nullable = true)
         |-- width: string (nullable = true)
    

    열 이름을 지정하지 않으면 기본 열 이름 '_1', '_2', ...이있는 DataFrame이 생성됩니다.

    df_default = data_rdd.toDF()
    
    df_default.printSchema()
    
        root
         |-- _1: string (nullable = true)
         |-- _2: string (nullable = true)
         |-- _3: string (nullable = true)
    
  2. ==============================

    2.이 질문에 대한 해결책은 실제로 실행중인 Spark 버전에 따라 다릅니다. Spark 2.0 이상이라고 가정하면 CSV를 DataFrame으로 읽고 RDD를 DataFrame으로 변환하거나 기존 데이터 프레임에 열을 추가하는 데 유용한 toDF가있는 열을 추가 할 수 있습니다.

    이 질문에 대한 해결책은 실제로 실행중인 Spark 버전에 따라 다릅니다. Spark 2.0 이상이라고 가정하면 CSV를 DataFrame으로 읽고 RDD를 DataFrame으로 변환하거나 기존 데이터 프레임에 열을 추가하는 데 유용한 toDF가있는 열을 추가 할 수 있습니다.

    filename = "/path/to/file.csv"
    df = spark.read.csv(filename).toDF("col1","col2","col3")
    
  3. ==============================

    3.

    f = sc.textFile("s3://test/abc.csv") <br />
    header = f.first()
    
    header will give you as below:-<br />
    u'col1,col2,col3'  --> for example taking 3 columns name
    
    head = str(header).split(",") <br />
    head will give you a list<br/>
    ['col1','col2','col3']
    
    fDF = f.filter(lambda row: row!=header).map(lambda x: str(x).split(",")).toDF(head)<br/>
    fdF.show() <br/>
    

    필요에 따라 데이터 프레임의 헤더와 데이터를 제공합니다.

  4. from https://stackoverflow.com/questions/36608559/how-to-assign-and-use-column-headers-in-spark by cc-by-sa and MIT license