Apache Spark를 사용한 Neo4J

in kr-dev •  3 years ago 

여소셜 네트워크, 세계 여행 경로, 제조 및 유통 산업을 위한 자재 추적성과 같은 고도로 연결된 데이터 세트에 대해 작업할 때 데이터를 저장하려면 강력한 그래프 데이터베이스가 필요합니다. 반면에 대규모 데이터 세트를 처리하려면 빅 데이터 처리 도구가 필요합니다.

이 블로그에서는 고도로 연결된 데이터 세트를 매우 잘 알려진 그래프 데이터베이스인 Neo4J 에 저장하는 방법과 Apache Spark 를 사용하여 데이터를 처리하는 방법을 보여줍니다 .

그래프 데이터 다운로드

우리는 여기 에서 항공 노선에 대한 그래프 데이터를 사용할 것 입니다. air-routes-latest-nodes.csv 에는 공항, 국가 및 대륙에 대한 세부 정보가 포함되어 있습니다. air-routes-latest-edges.csv 는 공항(경로), 국가 및 대륙(포함) 간의 관계를 포함합니다.

데이터 및 관계 이해

데이터를 그래프 데이터베이스에 푸시하기 전에 첫 번째 작업은 데이터 모델을 생성하는 것입니다. 즉, 노드와 속성을 식별하고 노드 간의 다양한 관계와 관계 속성을 식별하는 것입니다.

아래에서 다운로드한 항공 노선 데이터 세트의 단순화된 데이터 모델링 다이어그램을 찾으십시오.

Neo4J 설정

이 블로그에서는 Neo4J 데스크탑 버전을 사용했습니다. 다운로드 및 설치 세부 정보는 여기 에서 찾을 수 있습니다 .

새 사용자 만들기

새 사용자를 생성하거나 이미 생성된 사용자를 사용할 수 있습니다.

새 데이터베이스 생성

항공 노선 데이터 세트를 포함할 새 데이터베이스를 생성합니다.

Azure & Neo4J

Azure Marketplace에서 사용할 수 있는 다양한 설치 옵션이 있습니다. Neo4j Enterprise Edition 배포는 여기를 참조 하십시오 .

Azure Marketplace의 Neo4J 옵션.

그래프 데이터 가져오기 및 쿼리

일단 적절한 도메인 데이터 파일에서 데이터를 분리합니다. 데이터베이스 가져오기 디렉토리 내부에 보관하여 CSV 파일을 업로드할 수 있습니다 .

... Neo4j 사용자 인터페이스에서 파일을 로드합니다.

Neo4J 및 아파치 스파크

Neo4J에는 Apache Spark용 안정적인 라이브러리가 있습니다. 다음을 지원하는 빌더 API를 만들었습니다(자세한 내용은 여기 참조 ).

  1. RDD
  2. 데이터 프레임
  3. 그래프 프레임
  4. 그래프X

Azure Databricks를 데이터 분석 플랫폼으로 사용할 것입니다.

필요한 라이브러리

Maven 좌표 에서 최신 Neo4J-Spark 커넥터를 얻습니다 . Spark GraphFrame 라이브러리도 설치합니다.

필요한 라이브러리.

Neo4J와 Databrick 연결하기

Neo4J의 데스크톱 설치를 사용하고 있으므로 터널링 소프트웨어인 ngrok 을 사용하여 공용 연결 끝점을 만듭니다. 설치가 완료되면 다음을 실행합니다.

ngrok tcp <Neo4j 볼트 포트> 예: ngrok tcp 7687

공개 URL을 기록해 둡니다.

이제 다음을 사용하여 Databricks Spark Config 설정을 구성합니다.

spark.neo4j.bolt.url Bolt://0.tcp.ngrok.io:<포트> spark.neo4j.bolt.user <사용자 이름> spark.neo4j.bolt.password <비밀번호>

Neo4J 끝점을 가리켜야 합니다.

구성 후 Spark 클러스터를 다시 시작하면 준비가 완료됩니다!

Spark에서 데이터 로드

데이터가 데이터 레이크 원시 계층으로 수집되면 데이터 품질 검증, 정리, 변환을 위해 Apache Spark(및 Databricks)를 사용할 수 있으며 Spark-Neo4J API를 사용하여 데이터를 Neo4J에 대량으로 로드할 수 있습니다.

%스칼라// 레코드 읽기 및 Spark DataFrame 생성 val continentDF = spark.read     .format("csv")     .option("header", "true")     .option("inferSchema", "true")     .load("/FileStore /tables/test_continent2.csv")org.neo4j.spark.dataframe.Neo4jDataFrame 가져오기// Neo4jDataFrame을 사용하여 노드 생성 Neo4jDataFrame.createNodes(sc, continentDF, ("Continent", continentDF.columns.toSeq))

Neo4J에서 Spark로 데이터를 로드하고 추가 분석을 수행하거나 ML 알고리즘을 실행해야 할 수도 있습니다. Neo4J 끝에서 효율적인 실행을 위해 Cypher Query Language 를 사용하여 쿼리 조건을 푸시다운할 수 있습니다 .

org.neo4j.spark.Neo4j 가져오기발 네오 = Neo4j(sc)// Cypher 쿼리를 통해 레코드 로드 val df = neo.cypher("MATCH (a:Airport) RETURN a.code AS code, size((a)-[:ROUTE]->()) + size((a)< -[:ROUTE]-()) AS 정도").partitions(4).batch(25).loadDataFrame디스플레이(df)

Spark 끝에서 놀고 싶다면 Spark GraphFrame에 데이터를 로드할 수도 있습니다.

org.neo4j.spark._ 가져 오기 org.graphframes._ 가져오기val neo = Neo4j(sc) val graphFrame = neo.pattern(("공항", "코드"),("경로", "거리"),("공항", "코드")).partitions(6). 배치(10000).loadGraphFrameprintln(graphFrame.vertices.count) println(graphFrame.edges.count)

val 경로 = graphFrame.bfs.fromExpr("value='LHR'").toExpr("value='CCU'").run() 디스플레이(경로)

참조 아키텍처 다이어그램

Neo4J를 사용한 단순화된 아키텍처 다이어그램은 다음과 같습니다. 이는 프로젝트 요구 사항, 선택한 플랫폼 및 서비스에 따라 다릅니다.

단순화된 참조 아키텍처 다이어그램.

결론

  • Neo4J는 강력한 쿼리 언어와 통합 옵션을 갖춘 안정적인 그래프 데이터베이스입니다.
  • Apache Spark와 연결할 수 있는 API를 제공합니다. 요구 사항에 맞는 그래프 데이터베이스를 선택할 때 이를 염두에 두어야 합니다.
  • 그래프 데이터 처리를 위해 더 높은 성능을 위해 먼저 Neo4J 끝에서 쿼리를 푸시다운하거나 쿼리를 실행해야 합니다.
  • Apache Spark는 그래프 데이터에서 데이터 분석 또는 기계 학습 알고리즘을 실행하는 데 사용할 수 있습니다.
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.