查看新的spark数据框api,尚不清楚是否可以修改数据框列。
我怎么会去改变行的值x
列y
一个数据帧的?
在pandas
这将是df.ix[x,y] = new_value
编辑:合并以下内容,您不能修改现有数据框,因为它是不可变的,但是您可以返回具有所需修改的新数据框。
如果您只想根据条件替换列中的值,例如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)
如果要对列执行某些操作并创建一个添加到数据框的新列:
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。为此,您首先要创建一个UserDefinedFunction
实施操作以应用,然后有选择地将该功能仅应用到目标列。在Python中:
from pyspark.sql.functions import UserDefinedFunction
from pyspark.sql.types import StringType
name = 'target_column'
udf = UserDefinedFunction(lambda x: 'new_value', StringType())
new_df = old_df.select(*[udf(column).alias(name) if column == name else column for column in old_df.columns])
new_df
现在具有相同的模式old_df
(假设old_df.target_column
是类型StringType
以及),但在列中的所有值target_column
将是new_value
。
我有一个数据框架,我连接到它的所有字段。 连接后它成为另一个数据帧,最后我将其输出写入csv文件,并在其两列上进行分区。它的一列存在于第一个数据帧中,我不想包含在最终输出中。 这是我的代码: 在这里,我连接并创建另一个数据帧: 这就是我尝试过的 现在我不希望在我的输出中的数据分区列。 我正在基于DataPartition进行分区,所以我没有得到,但因为DataPartition存在于主数据帧中,所
看看新的spark dataframe api,不清楚是否可以修改dataframe列。 如何更改DataFrame的行列中的值? 如果要对列执行某些操作并创建添加到DataFrame的新列: 如果希望新列的名称与旧列相同,可以添加附加步骤:
我在 df 中有三列 我想在col1=x时执行以下操作,存储col2和col3的值,并在col1=y预期输出时将这些列值分配给下一行 任何帮助将不胜感激 注意:-火花 1.6
如何使用Pandas更新/组合/合并数据帧(df1)和来自另一个数据帧(df2)的值,其中df1有一个新列(col3)和来自df2的值。可乐2?换句话说,df1是当前月份的值,我希望df1也有一个来自df2的列,它是上个月的值。 任何关于这方面的见解都是值得赞赏的;非常感谢你。 DF1: DF2: 所需df:
好吧,我对使用Scala/Spark还比较陌生,我想知道是否有一种设计模式可以在流媒体应用程序中使用大量数据帧(几个100k)? 在我的示例中,我有一个SparkStreaming应用程序,其消息负载类似于: 因此,当用户id为123的消息传入时,我需要使用特定于相关用户的SparkSQL拉入一些外部数据,并将其本地缓存,然后执行一些额外的计算,然后将新数据持久保存到数据库中。然后对流外传入的每条
在Apache Spark 2.1.0中,我有两个数据帧aaa_01和aaa_ 02。 我对这两个数据帧执行内部联接,从两个数据帧中选择几个列以显示在输出中。 Join 工作正常,但输出数据帧具有与输入数据帧中存在的列名称相同的列名。我被困在这里。我需要使用新的列名称,而不是在输出数据帧中获取相同的列名称。 下面给出了示例代码供参考 我获取的输出数据帧的列名称为“col1,col2,col3”。我