Как выполнить регистрацию набора данных spark printSchema на уровне информации/отладки в проекте spark-java

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

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?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 544
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ответ принят как подходящий

Вы можете использовать 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 = ()

большое спасибо, там есть "df.schema().treeString()", но нужно проверить, работает ли он должным образом. Еще одна вещь, есть ли какой-либо блокнот Spark для Java? как у нас есть блоки данных для Scala? то есть для искрового программирования

Shyam 19.04.2019 08:39

АФИК нет. Но могу ошибаться. Вы можете отслеживать этот запрос функции, если вы заинтересованы. forums.databricks.com/questions/12066/…

Achilleus 19.04.2019 08:52

спасибо ..отправил forums.databricks.com/questions/17916/…

Shyam 19.04.2019 10:07

Другие вопросы по теме