Проверить, существует ли столбец в DF - Java Spark - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь проверить, существует ли какой-либо метод, чтобы узнать, существует ли конкретный столбец в Dataframe, и проверить его с помощью Java Spark. Я искал и получил предложения, связанные с Python, но ничего не связанное с Java.

Я извлекаю эти данные из Mon go и пытаюсь проверить, существуют ли определенные столбцы или нет. В mon go db для этой таблицы нет проверки схемы.

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

 |-- _id: string (nullable = true)
 |-- value: struct (nullable = true)
 |    |-- acctId: string (nullable = true)
 |    |-- conId: string (nullable = true)
 |    |-- dimensions: struct (nullable = true)
 |    |    |-- device: struct (nullable = true)
 |    |    |    |-- accountId: long (nullable = true)
 |    |    |    |-- addFreeTitleTime: timestamp (nullable = true)
 |    |    |    |-- build: string (nullable = true)
 |    |    |    |-- country: string (nullable = true)
 |    |    |    |-- countryOfResidence: string (nullable = true)
 |    |    |    |-- createDate: timestamp (nullable = true)
 |    |    |    |-- number: string (nullable = true)
 |    |    |    |-- FamilyName: string (nullable = true)
 |    |    |    |-- did: long (nullable = true)
 |    |    |    |-- deviceToken: string (nullable = true)
 |    |    |    |-- initialBuildNumber: string (nullable = true)
 |    |    |    |-- language: string (nullable = true)
 |    |    |    |-- major: integer (nullable = true)
 |    |    |    |-- minor: integer (nullable = true)
 |    |    |    |-- model: string (nullable = true)
 |    |    |    |-- modelDesc: string (nullable = true)
 |    |    |    |-- modelId: string (nullable = true)
 |    |    |    |-- modifyDate: timestamp (nullable = true)
 |    |    |    |-- preReg: integer (nullable = true)
 |    |    |    |-- retailer: string (nullable = true)
 |    |    |    |-- serialNumber: string (nullable = true)
 |    |    |    |-- softwareUpdateDate: timestamp (nullable = true)
 |    |    |    |-- softwareVersion: string (nullable = true)
 |    |    |    |-- sourceId: string (nullable = true)
 |    |    |    |-- timeZone: string (nullable = true)
 |    |    |-- location: struct (nullable = true)

Ваши отзывы и предложения будут иметь большое значение.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 15 июля 2020
sourceDF.printSchema
//  root
//  |-- category: string (nullable = true)
//  |-- tags: string (nullable = true)
//  |-- datetime: string (nullable = true)
//  |-- date: string (nullable = true)

  val cols = sourceDF.columns
//  cols: Array[String] = Array(category, tags, datetime, date)

  val IsFieldCategory = cols.filter(_ == "category")
//  IsFieldCategory: Array[String] = Array(category)

или

val isFieldTags = sourceDF.columns.contains("tags")
//  isFieldTags: Boolean = true
1 голос
/ 15 июля 2020

Да, вы можете добиться этого в Java, выбрав все столбцы набора данных и проверив, существует ли нужный столбец или нет. Приведем пример примера здесь:

Dataset<Object1> dataSet = spark.read().text("dataPath").as(Encoders.bean(Object1.class)); //load data in dataset
String[] columns = dataSet.columns(); // fetch all column names
System.out.println(Arrays.toString(columns).contains("columnNameToCheckFor")); //check if the column name we want to check exist in the array of columns.

Здесь я использовал очень наивный метод, чтобы проверить, существует ли имя столбца в массиве столбцов, вы можете использовать любой другой метод для выполнения этой проверки.

...