The following my dataframe schema

    root
     |-- name: string (nullable = true)
     |-- addresses: array (nullable = true)
     |    |-- element: struct (containsNull = true)
     |    |    |-- street: string (nullable = true)
     |    |    |-- city: string (nullable = true)

I want to output name and city. The following is my spark streaming app
which outputs name and addresses, but I want name and cities in the output.

    object PersonConsumer {
      import org.apache.spark.sql.{SQLContext, SparkSession}
      import com.example.protos.demo._

      def main(args : Array[String]) {

        val spark = SparkSession.builder.
          master("local")
          .appName("spark session example")
          .getOrCreate()

        import spark.implicits._

        val ds1 = spark.readStream.format("kafka").
          option("kafka.bootstrap.servers","localhost:9092").
          option("subscribe","person").load()

        val ds2 = ds1.map(row=>
row.getAs[Array[Byte]]("value")).map(Person.parseFrom(_)).select($"name",
$"addresses")

        ds2.printSchema()

        val query = ds2.writeStream
          .outputMode("append")
          .format("console")
          .start()

        query.awaitTermination()
      }
    }

Appreciate your help. Thanks.

Reply via email to