exchange2.5.0 工具写入parquet数据到nebula,查询的数据是字符串都变成二进制的字符串了

提问之前,记得在【本论坛】和【文档】下搜索是否已有解决方案存在哟 ^^

为了更快地定位、解决问题,麻烦参考下面模版提问(不符合提问规范的问题,会被隐藏待补充相关信息之后再发布

提问参考模版:

  • nebula 版本:(为节省回复者核对版本信息的时间,首次发帖的版本信息记得以截图形式展示)
  • 部署方式 单机:
  • 是否为线上版本:N
  • 硬件信息
  • 问题的具体描述
  • 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)

如果有日志或者代码,记得用 Markdown 语法(下面语法)包裹它们提高阅读体验,让回复者更快解决问题哟~~

MATCH (v:user) RETURN v;

配置文件如下

{
  # Spark相关配置
  spark: {
    app: {
      name: Nebula Exchange 2.5.0
    }
    driver: {
      cores: 1
      maxResultSize: 1G
    }
    executor: {
        memory:1G
    }

    cores {
      max: 16
    }
  }

  # Nebula Graph相关配置
  nebula: {
    address:{
      # 指定Graph服务和所有Meta服务的IP地址和端口。
      # 如果有多台服务器,地址之间用英文逗号(,)分隔。
      # 格式: "ip1:port","ip2:port","ip3:port"
      graph:["127.0.0.1:9669"]
      meta:["127.0.0.1:9559"]
    }

    # 指定拥有Nebula Graph写权限的用户名和密码。
    user: root
    pswd: nebula

    # 指定图空间名称。
    # CREATE SPACE risk_relation(partition_num=15, replica_factor=3, vid_type=fixed_string(30));
    space: risk_relation
    connection {
      timeout: 3000
      retry: 3
    }
    execution {
      retry: 3
    }
    error: {
      max: 32
      output: /tmp/errors
    }
    rate: {
      limit: 1024
      timeout: 1000
    }
  }

  # 处理点
  tags: [
    # 设置Tag player相关信息。
    {
      # 指定Nebula Graph中定义的Tag名称。
      name: user
      type: {
        # 指定数据源,使用Parquet。
        source: parquet

        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }

      # 指定Parquet文件的路径。
      # 如果文件存储在HDFS上,用双引号括起路径,以hdfs://开头,例如"hdfs://ip:port/xx/xx"。
      # 如果文件存储在本地,用双引号括起路径,以file://开头,例如"file:///tmp/xx.csv"。
      path: "hdfs://nameservice1/user/hive/warehouse/dm.db/dm_incr_risk_user"

      # 在fields里指定Parquet文件中key名称,其对应的value会作为Nebula Graph中指定属性的数据源。
      # 如果需要指定多个值,用英文逗号(,)隔开。
      fields: [type,status,mobile,register_time,risk_hit,risk_black,utime]

      # 指定Nebula Graph中定义的属性名称。
      # fields与nebula.fields的顺序必须一一对应。
      nebula.fields: [type,status,mobile,register_time,risk_hit,risk_black,utime]

      # 指定一个列作为VID的源。
      # vertex的值必须与Parquet文件中的字段保持一致。
      # 目前,Nebula Graph 2.5.0仅支持字符串或整数类型的VID。
      vertex: {
        field:user_id
      }

      # 指定单批次写入Nebula Graph的最大点数量。
      batch: 256

      # 指定Spark分片数量。
      partition: 32
    }
    # 如果需要添加更多点,请参考前面的配置进行添加。
    ]
  # 处理边
  edges: [
    # 设置Edge type follow相关信息。
    {
      # 指定Nebula Graph中定义的Edge type名称。
      name: relate
      type: {
        # 指定数据源,使用Parquet。
        source: parquet

        # 指定如何将点数据导入Nebula Graph:Client或SST。
        sink: client
      }

      # 指定Parquet文件的路径。
      # 如果文件存储在HDFS上,用双引号括起路径,以hdfs://开头,例如"hdfs://ip:port/xx/xx"。
      # 如果文件存储在本地,用双引号括起路径,以file://开头,例如"file:///tmp/xx.csv"。
      path: "hdfs://nameservice1/user/hive/warehouse/dm.db/dm_incr_risk_graph_finish_rel_user"

      # 在fields里指定Parquet文件中key名称,其对应的value会作为Nebula Graph中指定属性的数据源。
      # 如果需要指定多个值,用英文逗号(,)隔开。
      fields: [mobile,activity_count,cid_count,ip_count,gps_count,ua_count,wifiname_count,from_addr_count,to_addr_count,pay_order_count,finish_order_count,cancel_order_count,etl_time,score]

      # 指定Nebula Graph中定义的属性名称。
      # fields与nebula.fields的顺序必须一一对应。
      nebula.fields: [mobile,activity_count,cid_count,ip_count,gps_count,ua_count,wifiname_count,from_addr_count,to_addr_count,pay_order_count,finish_order_count,cancel_order_count,etl_time,score]

      # 指定一个列作为起始点和目的点的源。
      # vertex的值必须与Parquet文件中的字段保持一致。
      # 目前,Nebula Graph 2.5.0仅支持字符串或整数类型的VID。
      source: {
        field: user_id
      }
      target: {
        field: other_user_id
      }


      # 指定一个列作为rank的源(可选)。
      #ranking: rank

      # 指定单批次写入Nebula Graph的最大边数量。
      batch: 256

      # 指定Spark分片数量。
      partition: 32
    }

  ]
  # 如果需要添加更多边,请参考前面的配置进行添加。
}

写入之后结果 框里,只要是字符串类型的都变成二进制了

新搭建的测试服,是我哪里配置的不对吗

最后烦请删掉本模版和问题无关的信息之后,再提交提问,Thx

补充一下信息:
nebula 版本:2.5.0
exchange 版本:2.5.0
部署方式 单机:Y
是否为线上版本:N
硬件信息
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 8
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel Xeon Processor (Skylake, IBRS)
Stepping: 4
CPU MHz: 2194.842
BogoMIPS: 4389.68
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
L3 cache: 16384K
NUMA node0 CPU(s): 0-7
问题的具体描述:
exchange2.5.0 工具写入parquet数据到nebula2.5.0后,查询的数据是字符串都变成二进制的字符串了

你在spark-sql 中执行下 spark.read.parquet(filePath).show()看下parquet文件中的数据是什么样子的。 看着像是你的parquet文件生成的时候 type字段是一个object ,直接用object的toString来写数据了。