спарк как читать пн go данные в json строку? не использовать для схемы - PullRequest
0 голосов
/ 08 января 2020

Поскольку мне нужны данные, совместимые со всеми схемами, по умолчанию используется размер сэмпла 10000. Если я его включу, это потребует большой производительности и времени. Я хочу преобразовать данные в полную json без какой-либо схемы. Есть ли простой способ сделать это? Спасибо

import com.cd.flow.core.utils.ResourcesUtils
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

object TestMogonToString {
  Logger.getRootLogger.setLevel(Level.WARN)
  def main(args: Array[String]): Unit = {
    val m6PropValues = ResourcesUtils.getMogodbPropValues("ds6uri", "ds6database")
    val spark = SparkSession.builder.master("local[*]").appName(this.getClass.getSimpleName) .getOrCreate()
    import spark.implicits._
    val m_sql = "[{$match:{'updateTime':{'$gte':'2020-01-08 00:00:00','$lte':'2020-01-08 23:59:59'}}}]"
    println("m_sql", m_sql)
    val lxjStoreMongoDF = spark.read.format("com.mongodb.spark.sql.DefaultSource")
      .option("spark.mongodb.input.uri", m6PropValues._1).option("spark.mongodb.input.database", m6PropValues._2)
      .option("collection", "order").option("pipeline", m_sql)/*.schema(structureSchema)*/.load()
    lxjStoreMongoDF.show()
    lxjStoreMongoDF.printSchema()
    /**
      * +--------------------+-------------+--------+---------+---------------+----------+----------------+......
      * |                 _id|activityPrice| brandId|brandName|cancelBigReason|cancelNote|cancelOperribute|......
      * +--------------------+-------------+--------+---------+---------------+----------+----------------+......
      * |[5e1471dd666bb700...|            0|26000252| 奈雪の茶|              0|          |          null   fals......
      *---------------------------------------------------------------split
      * root
      * |-- _id: struct (nullable = true)
      * |    |-- oid: string (nullable = true)
      * |-- orderDrivers: array (nullable = true)
      * |    |-- element: struct (containsNull = true)
      * |    |    |-- name: string (nullable = true)
      * |    |    |-- phone: string (nullable = true)
      * |-- orderId: integer (nullable = true)
      * |-- orderNo: string (nullable = true)
      * |-- orderPreferentials: array (nullable = true)
      * |    |-- element: struct (containsNull = true)
      * |    |    |-- childType: integer (nullable = true)
      * |    |    |-- pid: string (nullable = true)
      * ..........
      */
    //I want that
    /**
      * +--------------------+---------
      * |   jsonstring       |....
      * +--------------------+---------
      * |{_id:100,activityPrice:xx.....}|....
      *---------------------------------------------------------------split
      * root
      * |-- jsonstring: string (nullable = true)
      * ..........
      */
  }
}

1 Ответ

0 голосов
/ 08 января 2020

Это работает, но оно также имеет размер сэмпла, помещенный в схему посередине. Я хочу пропустить конфигурацию семплов и go прямо к исходной полной строке. Интересно, есть ли такой способ?

    val jsonDF = lxjStoreMongoDF.toJSON.withColumnRenamed("value", "msg").withColumn("cd_ods_src", lit("m6"))
    jsonDF.printSchema()
    jsonDF.show()

root
 |-- msg: string (nullable = true)
 |-- cd_ods_src: string (nullable = false)

+--------------------+----------+
|                 msg|cd_ods_src|
+--------------------+----------+
|{"_id":{"oid":"5e...|        m6|
|{"_id":{"oid":"5e...|        m6|
|{"_id":{"oid":"5e...|        m6|

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...