14.13.2 Loading a PgxFrame from Client-Side Data

You can also load PgxFrame(s) directly from client-side data.

The following describes the steps to load a PgxFrame from client-side data:

  1. Create a Session and an Analyst:

    See step-1 in Loading a PgxFrame from a Database for the code examples.

  2. Define a frame schema to load a PgxFrame from client side data. For example, the following shows a frame schema defined with various data types:
    opg4j> var exampleFrameSchema = List.of(
        columnDescriptor("name", DataTypes.STRING_TYPE),
        columnDescriptor("age", DataTypes.INTEGER_TYPE),
        columnDescriptor("salary", DataTypes.DOUBLE_TYPE),
        columnDescriptor("married", DataTypes.BOOLEAN_TYPE),
        columnDescriptor("tax_rate", DataTypes.FLOAT_TYPE),
        columnDescriptor("random", DataTypes.LONG_TYPE),
        columnDescriptor("date_of_birth", DataTypes.LOCAL_DATE_TYPE)
    )
    List<ColumnDescriptor> exampleFrameSchema = Arrays.asList(
        columnDescriptor("name", DataTypes.STRING_TYPE), 
        columnDescriptor("age", DataTypes.INTEGER_TYPE),
        columnDescriptor("salary", DataTypes.DOUBLE_TYPE), 
        columnDescriptor("married", DataTypes.BOOLEAN_TYPE),
        columnDescriptor("tax_rate", DataTypes.FLOAT_TYPE), 
        columnDescriptor("random", DataTypes.LONG_TYPE),
        columnDescriptor("date_of_birth", DataTypes.LOCAL_DATE_TYPE)
    );
    example_frame_schema = [
        ("name", "STRING_TYPE"),
        ("age", "INTEGER_TYPE"),
        ("salary", "DOUBLE_TYPE"),
        ("married", "BOOLEAN_TYPE"),
        ("tax_rate", "FLOAT_TYPE"),
        ("random", "LONG_TYPE"),
        ("date_of_birth", "LOCAL_DATE_TYPE")
    ]
  3. Define data as per the schema.
    opg4j> Map<String, Iterable<?>> exampleFrameData = Map.of(
        "name", Arrays.asList("Alice", "Bob", "Charlie"), 
        "age", Arrays.asList(25, 27, 29),
        "salary", Arrays.asList(10000.0, 15000.0, 20000.0),
        "married", Arrays.asList(false, false, true),
        "tax_rate", Arrays.asList(0.21, 0.26, 0.32),
        "random", Arrays.asList(2394293898324L, 45640604960495L, 12312323409087654L),
        "date_of_birth", Arrays.asList(
            LocalDate.of(1990, 9, 15),
            LocalDate.of(1991, 11, 4),
            LocalDate.of(1993, 10, 4)
        )
    )
    Map<String, Iterable<?>> exampleFrameData = new HashMap<>();
    exampleFrameData.put("name", Arrays.asList("Alice", "Bob", "Charlie"));
    exampleFrameData.put("age", Arrays.asList(25, 27, 29));
    exampleFrameData.put("salary", Arrays.asList(10000.0, 15000.0, 20000.0));
    exampleFrameData.put("married", Arrays.asList(false, false, true));
    exampleFrameData.put("tax_rate", Arrays.asList(0.21, 0.26, 0.32));
    exampleFrameData.put("random", Arrays.asList(2394293898324L, 45640604960495L, 12312323409087654L));
    exampleFrameData.put("date_of_birth",
        Arrays.asList(LocalDate.of(1990, 9, 15),
            LocalDate.of(1991, 11, 4),
            LocalDate.of(1993, 10, 4)
        )
    );
    from datetime import date
    
    example_frame_data = {
        "name": ["Alice", "Bob", "Charlie"],
        "age": [25, 27, 29],
        "salary": [10000.0, 15000.0, 20000.0],
        "married": [False, False, True],
        "tax_rate": [0.21, 0.26, 0.32],
        "random": [2394293898324, 45640604960495, 12312323409087654],
        "date_of_birth": [date(1990, 9, 15),
                          date(1991, 11, 4),
                          date(1993, 10, 4)]
    }
  4. Load the frame as shown:
    opg4j> var exampleFrame = session.createFrame(exampleFrameSchema, exampleFrameData, "example frame")
    PgxFrame exampleFrame = session.createFrame(exampleFrameSchema, exampleFrameData, "example frame");
    example_frame=session.create_frame(example_frame_schema,example_frame_data,'example frame')
  5. You can also load the frame incrementally as you receive more data:
    opg4j> var exampleFrameBuilder = session.createFrameBuilder(exampleFrameSchema);
    opg4j> exampleFrameBuilder.addRows(exampleFrameData)
    opg4j> Map<String, Iterable<?>> exampleFrameDataPart2 = Map.of(
        "name", Arrays.asList("Dave"),
        "age", Arrays.asList(26),
        "salary", Arrays.asList(18000.0),
        "married", Arrays.asList(true),
        "tax_rate", Arrays.asList(0.30),
        "random", Arrays.asList(456783423423L),
        "date_of_birth", Arrays.asList(LocalDate.of(1989, 9, 15))
    )
    opg4j> exampleFrameBuilder.addRows(exampleFrameDataPart2)
    opg4j> var exampleFrame = exampleFrameBuilder.build("example frame")
    PgxFrameBuilder exampleFrameBuilder = session.createFrameBuilder(exampleFrameSchema);
    exampleFrameBuilder.addRows(exampleFrameData);
    Map<String, Iterable<?>> exampleFrameDataPart2 = new HashMap<>();
    exampleFrameDataPart2.put("name", Arrays.asList("Dave"));
    exampleFrameDataPart2.put("age", Arrays.asList(26));
    exampleFrameDataPart2.put("salary", Arrays.asList(18000.0));
    exampleFrameDataPart2.put("married", Arrays.asList(true));
    exampleFrameDataPart2.put("tax_rate", Arrays.asList(0.30));
    exampleFrameDataPart2.put("random", Arrays.asList(456783423423L));
    exampleFrameDataPart2.put("date_of_birth",
        Arrays.asList(LocalDate.of(1989, 9, 15))
    );
    exampleFrameBuilder.addRows(exampleFrameDataPart2);
    PgxFrame exampleFrame = exampleFrameBuilder.build("example frame");
    example_frame_builder = session.create_frame_builder(example_frame_schema)
    example_frame_builder.add_rows(example_frame_data)
    example_frame_data_part_2 = {
        "name": ["Dave"],
        "age": [26],
        "salary": [18000.0],
        "married": [True],
        "tax_rate": [0.30],
        "random": [456783423423],
        "date_of_birth": [date(1989, 9, 15)]
    }
    example_frame_builder.add_rows(example_frame_data_part_2)
    example_frame = example_frame_builder.build("example frame")
  6. Finally, you can also load a frame from a Pandas dataframe in Python as shown:
    import pandas as pd
    example_pandas_dataframe = pd.DataFrame(data=example_frame_data)
    example_frame = session.pandas_to_pgx_frame(example_pandas_dataframe, "example frame")

    You can also create a graph from the PgxFrame(s) . See Creating a Graph from Multiple PgxFrame Objects for more information.