Пытаюсь превратить мой проект 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?




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 = ()
АФИК нет. Но могу ошибаться. Вы можете отслеживать этот запрос функции, если вы заинтересованы. forums.databricks.com/questions/12066/…
спасибо ..отправил forums.databricks.com/questions/17916/…
большое спасибо, там есть "df.schema().treeString()", но нужно проверить, работает ли он должным образом. Еще одна вещь, есть ли какой-либо блокнот Spark для Java? как у нас есть блоки данных для Scala? то есть для искрового программирования