Рассматривая новую искровую фреймворку api, неясно, можно ли изменять столбцы данных.Обновление столбца dataframe в искровом излучении
Как мне изменить значение в строке x
столбец y
данных?
В pandas
это будет df.ix[x,y] = new_value
Edit: Закрепление, что было сказано ниже, вы не можете изменить существующий dataframe как он неизменен, но вы можете вернуть новый dataframe с требуемыми изменениями.
Если вы просто хотите, чтобы заменить значение в колонке на основе условия, как np.where
:
from pyspark.sql import functions as F
update_func = (F.when(F.col('update_col') == replace_val, new_value)
.otherwise(F.col('update_col')))
df = df.withColumn('new_column_name', update_func)
Если вы хотите, чтобы выполнить какую-то операцию на колонке и создать новый столбец, который добавляется к dataframe:
import pyspark.sql.functions as F
import pyspark.sql.types as T
def my_func(col):
do stuff to column here
return transformed_value
# if we assume that my_func returns a string
my_udf = F.UserDefinedFunction(my_func, T.StringType())
df = df.withColumn('new_column_name', my_udf('update_col'))
Если вы хотите новый столбец иметь такое же имя, как и старый столбец, можно добавить дополнительный шаг:
df = df.drop('update_col').withColumnRenamed('new_column_name', 'update_col')
Если вы хотите получить доступ к DataFrame по индексу, вам нужно сначала создать индекс. См., Например, http://stackoverflow.com/questions/26828815/how-to-get-elemnt-by-index-in-spark-rdd-java. Или добавьте индексный столбец со своим собственным индексом. – fanfabbb