В Java вы можете сделать это, чтобы объединить несколько столбцов. Образец кода - предоставить вам сценарий и как его использовать для лучшего понимания.
SparkSession spark = JavaSparkSessionSingleton.getInstance(rdd.context().getConf());
Dataset<Row> reducedInventory = spark.sql("select * from table_name")
.withColumn("concatenatedCol",
concat(col("col1"), lit("_"), col("col2"), lit("_"), col("col3")));
class JavaSparkSessionSingleton {
private static transient SparkSession instance = null;
public static SparkSession getInstance(SparkConf sparkConf) {
if (instance == null) {
instance = SparkSession.builder().config(sparkConf)
.getOrCreate();
}
return instance;
}
}
Вышеупомянутый код объединил col1, col2, col3, разделенный «_», чтобы создать столбец с именем «concatenatedCol ».
Bare *
используется, чтобы заставить вызывающего пользователя использовать именованные аргументы, поэтому вы не можете определить функцию с *
в качестве аргумента, если у вас нет следующих аргументов ключевого слова.
См. этот ответ или документации Python 3 для более подробной информации.
Хотя исходный ответ полностью отвечает на вопрос, просто добавляя немного связанной информации. Поведение для одиночной звездочки происходит от PEP-3102
. Цитирование связанного раздела:
The second syntactical change is to allow the argument name to
be omitted for a varargs argument. The meaning of this is to
allow for keyword-only arguments for functions that would not
otherwise take a varargs argument:
def compare(a, b, *, key=None):
...
В простом английском языке это означает, что для передачи значения для ключа вам необходимо явно передать его как key="value"
.