2017-01-04 1 views
0

저는 Spark를 처음 사용 (1 개월 미만!) 고정 너비의 플랫 파일 원시 데이터 입력으로 작업하고 있습니다. sqlContext를 사용하여 com.databricks.spark.csv를 사용하여 파일을 읽은 다음 .withColumn을 사용하여 너비를 기반으로 행의 하위 문자열을 작성합니다.고정 너비 파일에서 스파크 읽기

rawData.withColumn("ID"), trim(rawData['c0'].substr(1,8))) 

마지막으로 발생하는 문제는 가변 폭입니다. 그것은 고정 된 시작점을 가지고 있지만 20 자 너비와 같은 데이터의 '세트'가 다양합니다. 예를 들어

Row 1 A 1243 B 42225 C 23213 
Row 2 A 12425 
Row 3 A 111 B 2222 C 3 D 4 E55555 

그래서 난 그냥 가변 폭 열에서 각 그룹의 첫 번째 문자를 꺼내, 다음 출력이 보이도록 바꾸어, 결국 그 변수 필드에서 읽을 필요가 같은 :

Row 1 A 
Row 1 B 
Row 1 C 
Row 2 A 
... 
Row 3 D 
Row 3 E 

필자가 필요로하는 고정 너비 열을 읽었으나 가변 너비 필드에 고정되어 있습니다.

+0

당신은 숫자를 제거하는 정규식을 사용하여 행에 데이터를 전치하는 데 도움이 될 수 있습니다 폭발. – Abhi

답변

0

zipWithIndex하고 알파벳으로 끝낼 수 있도록, 각 요소

sc.textFile ("csv.data").map(_.split("\\s+")).zipWithIndex.toDF("dataArray","rowId").select ($"rowId",explode($"dataArray")).show(false) 

+-----+------+ 
|rowId|col | 
+-----+------+ 
|0 |A  | 
|0 |1243 | 
|0 |B  | 
|0 |42225 | 
|0 |C  | 
|0 |23213 | 
|1 |A  | 
|1 |12425 | 
|2 |A  | 
|2 |111 |