导入数据到neo4j


title: 导入数据到neo4j
date: 2023-10-08 13:35:49
categories:

  • 大数据技术
    tags:

代码

package neo4j;

import org.neo4j.driver.v1.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;


public class Neo4jDataImport {
    public static void main(String[] args) {
        try (Driver driver = GraphDatabase.driver( "bolt://localhost:7687", AuthTokens.basic( "neo4j", "123456" ) )) {
            // 读取数据集并创建节点
            try (Session session = driver.session()) {
                String csvFile = "input/data_low.csv"; // 数据集文件路径

                //区域
                Set<String> uniqueAddresses = new HashSet<>();
                //房屋布局
                Set<String> uniqueLayouts = new HashSet<>();
                //建筑风格
                Set<String> uniqueBuildingTypes = new HashSet<>();
                // 朝向
                Set<String> uniqueOrientations = new HashSet<>();
                //装修风格
                Set<String> uniqueDecorations = new HashSet<>();
             // 获取电梯数量,去重
                Set<String> uniqueElevatorCounts = new HashSet<>();
             // 获取供暖方式,去重
                Set<String> uniqueHeatingMethods = new HashSet<>();
             // 获取房屋用途,去重
                Set<String> uniqueHouseUses = new HashSet<>();
             // 获取房屋产权,去重
                Set<String> uniquePropertyOwnerships = new HashSet<>();
             // 获取楼层描述,去重
                Set<String> uniqueFloorDescriptions = new HashSet<>();
             // 获取总楼层,去重
                Set<Integer> uniqueTotalFloors = new HashSet<>();
             // 获取总价格,去重
                Set<Double> uniqueTotalPrices = new HashSet<>();
             // 获取单价,去重
                Set<Double> uniqueUnitPrices = new HashSet<>();

                
                


                try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
                    String line;
                    while ((line = br.readLine()) != null) {
                        String[] data = line.split(","); // 假定CSV文件使用逗号分隔

                        // 获取房屋地址,去重
                        String address = data[1];
                        uniqueAddresses.add(address);
                        
                        // 获取房屋布局,去重
                        String layout = data[4].trim(); // 去除空格
                        uniqueLayouts.add(layout);
                        
                        // 获取建筑类型,去重
                        String buildingType = data[6].trim(); // 去除空格
                        uniqueBuildingTypes.add(buildingType);
                        
                        // 获取朝向,去重
                        String orientation = data[7].trim(); // 去除空格
                        uniqueOrientations.add(orientation);
                        
                        // 获取装修风格,去重
                        String decoration = data[8].trim(); // 去除空格
                        uniqueDecorations.add(decoration);
                        
                        // 获取电梯数量,去重
                        String elevatorCount = data[9].trim(); // 去除空格
                        uniqueElevatorCounts.add(elevatorCount);
                        
                         // 获取供暖方式,去重
                        String heatingMethod = data[10].trim(); // 去除空格
                        uniqueHeatingMethods.add(heatingMethod);
                        // 获取房屋用途,去重
                        String houseUse = data[11].trim(); // 去除空格
                        uniqueHouseUses.add(houseUse);
                        
                     // 获取房屋产权,去重
                        String propertyOwnership = data[12].trim(); // 去除空格
                        uniquePropertyOwnerships.add(propertyOwnership);
                        
                        // 获取楼层描述,去重
                        String floorDescription = data[13].trim(); // 去除空格
                        uniqueFloorDescriptions.add(floorDescription);
                        
                        // 获取总楼层,需要将字符串转为整数类型,去重
                        try {
                            int totalFloors = Integer.parseInt(data[14].trim()); // 去除空格并转为整数
                            uniqueTotalFloors.add(totalFloors);
                        } catch (NumberFormatException e) {
                            // 处理无效的整数值
                            // 可以选择跳过或进行其他处理
                            // 跳过无效值并记录日志
                            System.err.println("Invalid total floors value: " + data[14].trim() + " at line: " + line);
                            continue;
                        }
                                         

                     // 获取总价格,需要将字符串转为双精度类型,去重
                        try {
                            double totalPrice = Double.parseDouble(data[2].trim()); // 去除空格并转为双精度
                            uniqueTotalPrices.add(totalPrice);
                            double unitPrice = Double.parseDouble(data[3].trim()); // 去除空格并转为双精度
                            uniqueUnitPrices.add(unitPrice);
                        } catch (NumberFormatException e) {
                            // 处理无效的双精度值
                            // 可以选择跳过或进行其他处理
                            // 例如:记录日志、设置默认值或报告无效值
                            // 在这个示例中,我们将无效值设置为0.0
                            System.err.println("Invalid total price value: " + data[2]);
                            System.err.println("Invalid unit price value: " + data[3]);
                            uniqueTotalPrices.add(0.0); // 设置默认值
                            uniqueUnitPrices.add(0.0);
                        }



                     // 创建房屋节点
                        session.writeTransaction(new TransactionWork<Void>() {
                            @Override
                            public Void execute(Transaction tx) {
                                double price = 0.0; // 默认价格,可以根据需要修改默认值
                                double unitPrice = 0.0; // 默认单价,可以根据需要修改默认值
                                
                                try {
                                    price = Double.parseDouble(data[2]); // 尝试将价格字段转为双精度类型
                                    unitPrice = Double.parseDouble(data[3]);
                                } catch (NumberFormatException e) {
                                    System.err.println("Invalid price value: " + data[2]);
                                    System.err.println("Invalid unitPrice value: " + data[3]);
                                }

                                tx.run("CREATE (house:House { id: $id, address: $address, price: $price, unit_price: $unitPrice, layout: $layout, " +
                                        "rental_area: $rentalArea, building_type: $buildingType, orientation: $orientation, decoration: $decoration, " +
                                        "elevator_style: $elevatorCount, heating_system: $heatingMethod, transaction_type: $houseUse, " +
                                        "property: $propertyOwnership, floor_description: $floorDescription, total_floors: $totalFloors})",
                                        Values.parameters("id", data[0], "address", address, "price", price, "unitPrice", unitPrice,
                                                "layout", data[4], "rentalArea", Double.parseDouble(data[5]), "buildingType", data[6], "orientation", data[7],
                                                "decoration", data[8], "elevatorCount", data[9], "heatingMethod", data[10], "houseUse", data[11],
                                                "propertyOwnership", data[12], "floorDescription", data[13], "totalFloors", Integer.parseInt(data[14])));
                                return null;
                            }
                        });


                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                


                // 创建房屋地址节点和建立关系
                for (String uniqueAddress : uniqueAddresses) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (address:Address {name: $name})", Values.parameters("name", uniqueAddress));
                            return null;
                        }
                    });

                    // 建立房屋与地址之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {address: $address}), (address:Address {name: $name}) CREATE (house)-[:LOCATED_AT]->(address)",
                                    Values.parameters("address", uniqueAddress, "name", uniqueAddress));
                            return null;
                        }
                    });
                        
                }
                
             // 创建房屋布局节点和建立房屋与布局之间的关系
                for (String uniqueLayout : uniqueLayouts) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (layout:Layout {name: $name})", Values.parameters("name", uniqueLayout));
                            return null;
                        }
                    });

                    // 建立房屋与布局之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {layout: $layout}), (layout:Layout {name: $name}) CREATE (house)-[:HAS_LAYOUT]->(layout)",
                                    Values.parameters("layout", uniqueLayout, "name", uniqueLayout));
                            return null;
                        }
                    });
                }
                
                // 创建建筑类型节点和建立房屋与建筑类型之间的关系
                for (String uniqueBuildingType : uniqueBuildingTypes) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (buildingType:BuildingType {name: $name})", Values.parameters("name", uniqueBuildingType));
                            return null;
                        }
                    });

                    // 建立房屋与建筑类型之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {building_type: $buildingType}), (buildingType:BuildingType {name: $name}) CREATE (house)-[:HAS_BUILDING_TYPE]->(buildingType)",
                                    Values.parameters("buildingType", uniqueBuildingType, "name", uniqueBuildingType));
                            return null;
                        }
                    });
                }
                 
                // 创建朝向节点和建立房屋与朝向之间的关系
                for (String uniqueOrientation : uniqueOrientations) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (orientation:Orientation {name: $name})", Values.parameters("name", uniqueOrientation));
                            return null;
                        }
                    });

                    // 建立房屋与朝向之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {orientation: $orientation}), (orientation:Orientation {name: $name}) CREATE (house)-[:HAS_ORIENTATION]->(orientation)",
                                    Values.parameters("orientation", uniqueOrientation, "name", uniqueOrientation));
                            return null;
                        }
                    });
                }
                
             // 创建装修风格节点和建立房屋与装修风格之间的关系
                for (String uniqueDecoration : uniqueDecorations) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (decoration:DecorationStyle {name: $name})", Values.parameters("name", uniqueDecoration));
                            return null;
                        }
                    });

                    // 建立房屋与装修风格之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {decoration: $decoration}), (decoration:DecorationStyle {name: $name}) CREATE (house)-[:HAS_DECORATION]->(decoration)",
                                    Values.parameters("decoration", uniqueDecoration, "name", uniqueDecoration));
                            return null;
                        }
                    });
                }
                
             // 创建电梯数量节点和建立房屋与电梯数量之间的关系
                for (String uniqueElevatorCount : uniqueElevatorCounts) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (elevatorCount:ElevatorCount {name: $name})", Values.parameters("name", uniqueElevatorCount));
                            return null;
                        }
                    });

                    // 建立房屋与电梯数量之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {elevator_style: $elevatorCount}), (elevatorCount:ElevatorCount {name: $name}) CREATE (house)-[:HAS_ELEVATOR_COUNT]->(elevatorCount)",
                                    Values.parameters("elevatorCount", uniqueElevatorCount, "name", uniqueElevatorCount));
                            return null;
                        }
                    });
                }
                
             // 创建供暖方式节点和建立房屋与供暖方式之间的关系
                for (String uniqueHeatingMethod : uniqueHeatingMethods) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (heatingMethod:HeatingMethod {name: $name})", Values.parameters("name", uniqueHeatingMethod));
                            return null;
                        }
                    });

                    // 建立房屋与供暖方式之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {heating_system: $heatingMethod}), (heatingMethod:HeatingMethod {name: $name}) CREATE (house)-[:HAS_HEATING_METHOD]->(heatingMethod)",
                                    Values.parameters("heatingMethod", uniqueHeatingMethod, "name", uniqueHeatingMethod));
                            return null;
                        }
                    });
                }
                
             // 创建房屋用途节点和建立房屋与用途之间的关系
                for (String uniqueHouseUse : uniqueHouseUses) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (houseUse:HouseUse {name: $name})", Values.parameters("name", uniqueHouseUse));
                            return null;
                        }
                    });

                    // 建立房屋与用途之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {use: $houseUse}), (houseUse:HouseUse {name: $name}) CREATE (house)-[:HAS_HOUSE_USE]->(houseUse)",
                                    Values.parameters("houseUse", uniqueHouseUse, "name", uniqueHouseUse));
                            return null;
                        }
                    });
                }
                
             // 创建房屋产权节点和建立房屋与产权之间的关系
                for (String uniquePropertyOwnership : uniquePropertyOwnerships) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (propertyOwnership:PropertyOwnership {name: $name})", Values.parameters("name", uniquePropertyOwnership));
                            return null;
                        }
                    });

                    // 建立房屋与产权之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {property: $propertyOwnership}), (propertyOwnership:PropertyOwnership {name: $name}) CREATE (house)-[:HAS_PROPERTY_OWNERSHIP]->(propertyOwnership)",
                                    Values.parameters("propertyOwnership", uniquePropertyOwnership, "name", uniquePropertyOwnership));
                            return null;
                        }
                    });
                }
                
             // 创建楼层描述节点和建立房屋与楼层描述之间的关系
                for (String uniqueFloorDescription : uniqueFloorDescriptions) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (floorDescription:FloorDescription {name: $name})", Values.parameters("name", uniqueFloorDescription));
                            return null;
                        }
                    });

                    // 建立房屋与楼层描述之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {floor_description: $floorDescription}), (floorDescription:FloorDescription {name: $name}) CREATE (house)-[:HAS_FLOOR_DESCRIPTION]->(floorDescription)",
                                    Values.parameters("floorDescription", uniqueFloorDescription, "name", uniqueFloorDescription));
                            return null;
                        }
                    });
                }
                
             // 创建总楼层节点和建立房屋与总楼层之间的关系
                for (int uniqueTotalFloor : uniqueTotalFloors) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (totalFloor:TotalFloor {level: $level})", Values.parameters("level", uniqueTotalFloor));
                            return null;
                        }
                    });

                    // 建立房屋与总楼层之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {total_floors: $totalFloor}), (totalFloor:TotalFloor {level: $level}) CREATE (house)-[:HAS_TOTAL_FLOOR]->(totalFloor)",
                                    Values.parameters("totalFloor", uniqueTotalFloor, "level", uniqueTotalFloor));
                            return null;
                        }
                    });
                }

             // 创建总价格节点和建立房屋与价格之间的关系
                for (double uniqueTotalPrice : uniqueTotalPrices) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (totalPrice:TotalPrice {amount: $amount})", Values.parameters("amount", uniqueTotalPrice));
                            return null;
                        }
                    });

                    // 建立房屋与价格之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {price: $price}), (totalPrice:TotalPrice {amount: $amount}) CREATE (house)-[:HAS_TOTAL_PRICE]->(totalPrice)",
                                    Values.parameters("price", uniqueTotalPrice, "amount", uniqueTotalPrice));
                            return null;
                        }
                    });
                }
                
             // 创建单价节点和建立房屋与单价之间的关系
                for (double uniqueUnitPrice : uniqueUnitPrices) {
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("CREATE (unitPrice:UnitPrice {amount: $amount})", Values.parameters("amount", uniqueUnitPrice));
                            return null;
                        }
                    });

                    // 建立房屋与单价之间的关系
                    session.writeTransaction(new TransactionWork<Void>() {
                        @Override
                        public Void execute(Transaction tx) {
                            tx.run("MATCH (house:House {unit_price: $unitPrice}), (unitPrice:UnitPrice {amount: $amount}) CREATE (house)-[:HAS_UNIT_PRICE]->(unitPrice)",
                                    Values.parameters("unitPrice", uniqueUnitPrice, "amount", uniqueUnitPrice));
                            return null;
                        }
                    });
                }
            }
            
        }
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elik-hb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值