여소셜 네트워크, 세계 여행 경로, 제조 및 유통 산업을 위한 자재 추적성과 같은 고도로 연결된 데이터 세트에 대해 작업할 때 데이터를 저장하려면 강력한 그래프 데이터베이스가 필요합니다. 반면에 대규모 데이터 세트를 처리하려면 빅 데이터 처리 도구가 필요합니다.
이 블로그에서는 고도로 연결된 데이터 세트를 매우 잘 알려진 그래프 데이터베이스인 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를 만들었습니다(자세한 내용은 여기 참조 ).
- RDD
- 데이터 프레임
- 그래프 프레임
- 그래프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는 그래프 데이터에서 데이터 분석 또는 기계 학습 알고리즘을 실행하는 데 사용할 수 있습니다.
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit