Как сделать запись в spark Dataset printSchema на уровне информации / отладки в проекте spark- java - PullRequest
0 голосов
/ 18 апреля 2019

Пытаюсь превратить мой проект spark scala в проект spark-java. У меня есть вход в систему, как указано ниже

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

    class ClassName{
      val logger  = LoggerFactory.getLogger("ClassName")
      ...
      val dataframe1 = ....///read dataframe from text file.
      ...

      logger.debug("dataframe1.printSchema : \n " + dataframe1.printSchema; //this is working fine.
    }

Теперь я пытаюсь написать это в Java 1.8, как показано ниже

public class ClassName{

    public static final Logger logger  = oggerFactory.getLogger("ClassName"); 
      ...
     Dataset<Row> dataframe1 = ....///read dataframe from text file.
     ...

     logger.debug("dataframe1.printSchema : \n " + dataframe1.printSchema()); //this is not working 

}

Я пробовал несколько способов, но ничего не помогло зарегистрировать printSchema в режиме отладки / информации.

dataframe1.printSchema () // это фактически возвращает void, следовательно, не может присоединиться к строке.

Как на самом деле ведется логирование проектов на уровне производства spark-java? Каков наилучший подход, которому я должен следовать, чтобы войти в систему отладки?

Как справиться с описанным выше сценарием? то есть log.debug (dataframe1.printSchema ()) в Java?

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Вы можете использовать df.schema.treeString. Это возвращает строку при сравнении с Unit (), эквивалентным Void в Java, возвращаемом df.printSchema. Это верно в Scala, и я считаю, что то же самое в Java. Дайте мне знать, если это поможет.

scala> val df = Seq(1, 2, 3).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]

scala> val x = df.schema.treeString
x: String =
"root
 |-- value: integer (nullable = false)
"

scala> val y = df.printSchema
root
 |-- value: integer (nullable = false)

y: Unit = ()
3 голосов
/ 18 апреля 2019

printSchema метод уже выводит схему на консоль, не возвращая ее в любой форме.Вы можете просто вызвать метод и перенаправить вывод консоли в другое место.Есть и другие обходные пути, такие как этот .

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