Spark 로컬 파일 및 HDFS 파일 읽기

1779 단어 Spark

전언


옆에 있는 인턴은 또 어리둥절한 표정을 지었다. 스파크에 버그가 있는데 분명히 내 로컬/data 디렉터리에 테스트가 있다.txt 파일이지만 실행하면 오류가 발생합니다.
Caused by: java.io.FileNotFoundException: File file:/data/test.txt does not exist

내가 보기에, 원래 젊은이는 spark 집단 모드를 사용하여 자기 클라이언트에만 저장된 텍스트 파일을 읽었다

로컬 파일을 읽는 방법


Spark는 로컬 파일 시스템에서 파일을 읽을 수 있지만, 그룹의 모든 노드의 같은 경로에서 파일을 찾을 수 있도록 합니다.
읽기 방식: 만약 데이터가 집단의 모든 노드의 같은 경로 아래에 있다면 file://경로로 입력하기만 하면 됩니다.스파크가 자동으로 처리됩니다.
val df = spark.read.textFile("file:///data/test.txt")

만약 파일이 그룹의 모든 노드에 놓여 있지 않다면, 드라이브 프로그램에서 이 파일을 로컬에서 읽을 수 있으며, 전체 그룹을 사용하지 않고parallelize를 호출해서 작업 노드에 내용을 나누어 줄 수 있습니다.그러나 이런 방식은 비교적 느릴 수 있기 때문에 추천하는 방법은 HDFS, NFS, S3 등 공유 파일 시스템에 파일을 먼저 놓는 것이다.
그러나 우리는 항상 소량의 데이터를 가지고 로컬에서 테스트를 하는데, 이럴 때는 로컬모드를 사용하여 로컬데이터를 읽어야 한다

Spark Shell 시작 로컬 모드

spark2-shell --master local[2]

시작이 완료되면 로컬 파일을 읽을 수 있습니다.
scala> spark.read.textFile("file:///data/test.txt").show()
+-----+
|value|
+-----+
| 1,zs|
| 2,ls|
| 3,ww|
| 4,zl|
+-----+

Spark Submit 시작 로컬 모드


코드:
import org.apache.spark.sql.SparkSession

object Local_HDFS {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .appName(this.getClass.getSimpleName)
      .getOrCreate()
    spark.read.textFile(args(0)).show()
    spark.stop()
  }
}

패키지로 업로드한 후 로컬 모드를 시작합니다.
spark2-submit --master local[2] --class test.Local_HDFS Test.jar file:///data/test.txt

이렇게 해도 결과를 얻을 수 있다.
+-----+
|value|
+-----+
| 1,zs|
| 2,ls|
| 3,ww|
| 4,zl|
+-----+

참고: Jar 패키지는 클라이언트 로컬 및 HDFS 모두에 배치할 수 있습니다.

좋은 웹페이지 즐겨찾기