我有一个 DataFrame,我想添加一列不同的 uuid4() 行。我的代码:
from pyspark.sql import SparkSession
from pyspark.sql import functions as f
from pyspark.sql.types import StringType
from uuid import uuid4
spark_session = SparkSession.builder.getOrCreate()
df = spark_session.createDataFrame([
[1, 1, 'teste'],
[2, 2, 'teste'],
[3, 0, 'teste'],
[4, 5, 'teste'],
],
list('abc'))
df = df.withColumn("_tmp", f.lit(1))
uuids = [str(uuid4()) for _ in range(df.count())]
df1 = spark_session.createDataFrame(uuids, StringType())
df1 = df_1.withColumn("_tmp", f.lit(1))
df2 = df.join(df_1, "_tmp", "inner").drop("_tmp")
df2.show()
Run Code Online (Sandbox Code Playgroud)
但我有这个错误:
Py4JJavaError: An error occurred while calling o1571.showString.
: org.apache.spark.sql.AnalysisException: Detected implicit cartesian …Run Code Online (Sandbox Code Playgroud) 我必须根据值列表将列添加到PySpark数据框。
a= spark.createDataFrame([("Dog", "Cat"), ("Cat", "Dog"), ("Mouse", "Cat")],["Animal", "Enemy"])
Run Code Online (Sandbox Code Playgroud)
我有一个名为评价的列表,它是每个宠物的评价。
rating = [5,4,1]
Run Code Online (Sandbox Code Playgroud)
我需要在数据框后面附加一个称为Rating的列,这样
a= spark.createDataFrame([("Dog", "Cat"), ("Cat", "Dog"), ("Mouse", "Cat")],["Animal", "Enemy"])
Run Code Online (Sandbox Code Playgroud)
我已完成以下操作,但是它仅返回“评级”列中列表中的第一个值
def add_labels():
return rating.pop(0)
labels_udf = udf(add_labels, IntegerType())
new_df = a.withColumn('Rating', labels_udf()).cache()
Run Code Online (Sandbox Code Playgroud)
出:
rating = [5,4,1]
Run Code Online (Sandbox Code Playgroud) 我需要使用三个非常简单的约束将索引列添加到数据框:
从0开始
是顺序的
确定性的
我确定我遗漏了一些明显的东西,因为对于这样一个简单的任务,或者使用非顺序,不确定性越来越单调的id,我发现的示例看起来非常复杂。我不想使用index压缩,然后不得不将以前分开的列现在分开放在单列中,因为我的数据帧在TB中,这似乎是不必要的。我不需要按任何分区,也不需要按任何顺序进行分区,而我所找到的示例可以做到这一点(使用窗口函数和row_number)。我需要的只是一个简单的0到df.count整数序列。我在这里想念什么?
我想在 pyspark 中将唯一的行号添加到我的数据框中,并且不想使用 monotonicallyIncreasingId 和 partitionBy 方法。我认为这个问题可能与之前提出的类似问题重复,仍在寻找一些建议,无论我的做法是否正确。以下是我的代码片段:我有一个包含以下输入记录集的 csv 文件:
1,VIKRANT SINGH RANA ,NOIDA ,10000
3,GOVIND NIMBHAL ,DWARKA ,92000
2,RAGHVENDRA KUMAR GUPTA,GURGAON ,50000
4,ABHIJAN SINHA ,SAKET ,65000
5,SUPER DEVELOPER ,USA ,50000
6,RAJAT TYAGI ,UP ,65000
7,AJAY SHARMA ,NOIDA ,70000
8,SIDDHARTH BASU ,SAKET ,72000
9,ROBERT ,GURGAON ,70000
Run Code Online (Sandbox Code Playgroud)
我已将此 csv 文件加载到数据框中。
PATH_TO_FILE="file:///u/user/vikrant/testdata/EMP_FILE.csv"
emp_df = spark.read.format("com.databricks.spark.csv") \
.option("mode", "DROPMALFORMED") \
.option("header", "true") \
.option("inferschema", "true") \
.option("delimiter", ",").load(PATH_TO_FILE)
+------+--------------------+--------+----------+
|emp_id| emp_name|emp_city|emp_salary|
+------+--------------------+--------+----------+
| 1|VIKRANT SINGH RAN...|NOIDA | 10000|
| 3|GOVIND NIMBHAL ...|DWARKA | 92000| …Run Code Online (Sandbox Code Playgroud) pyspark ×4
apache-spark ×1
csv ×1
dataframe ×1
indexing ×1
list ×1
python ×1
python-3.x ×1
rdd ×1