假设我有一个示例数据框,如下所示:
+-----+----+----+
| col1|col2|col3|
+-----+----+----+
| cat| 10| 1.5|
| dog| 20| 9.0|
| null| 30|null|
|mouse|null|15.3|
+-----+----+----+
Run Code Online (Sandbox Code Playgroud)
我想根据数据类型填充空值。例如,对于字符串类型,我想填充“N/A”,对于整数类型,我想添加 0。同样,对于浮点数,我想添加 0.0。
我尝试使用 df.fillna() 但后来我意识到可能有“N”列,所以我想要一个动态解决方案。
我正在 databricks 中尝试这个。请让我知道需要导入的 pyspark 库以及在 Azure databricks pyspark 中获取以下输出的代码
示例:- 输入数据框:-
| column1 | column2 | column3 | column4 |
| a | bbbbb | cc | >dddddddd |
| >aaaaaaaaaaaaaa | bb | c | dddd |
| aa | >bbbbbbbbbbbb | >ccccccc | ddddd |
| aaaaa | bbbb | ccc | d |
Run Code Online (Sandbox Code Playgroud)
输出数据帧:-
| column | maxLength |
| column1 | 14 |
| column2 | 12 |
| column3 | 7 |
| column4 | …Run Code Online (Sandbox Code Playgroud) 我有一个 pyspark 数据框,如下所示:
+--------+----------+---------+----------+-----------+--------------------+
|order_id|product_id|seller_id| date|pieces_sold| bill_raw_text|
+--------+----------+---------+----------+-----------+--------------------+
| 668| 886059| 3205|2015-01-14| 91|pbdbzvpqzqvtzxone...|
| 6608| 541277| 1917|2012-09-02| 44|cjucgejlqnmfpfcmg...|
| 12962| 613131| 2407|2016-08-26| 90|cgqhggsjmrgkrfevc...|
| 14223| 774215| 1196|2010-03-04| 46|btujmkfntccaewurg...|
| 15131| 769255| 1546|2018-11-28| 13|mrfsamfuhpgyfjgki...|
| 15625| 86357| 2455|2008-04-18| 50|wlwsliatrrywqjrih...|
| 18470| 26238| 295|2009-03-06| 86|zrfdpymzkgbgdwFwz...|
| 29883| 995036| 4596|2009-10-25| 86|oxcutwmqgmioaelsj...|
| 38428| 193694| 3826|2014-01-26| 82|yonksvwhrfqkytypr...|
| 41023| 949332| 4158|2014-09-03| 83|hubxhfdtxrqsfotdq...|
+--------+----------+---------+----------+-----------+--------------------+
Run Code Online (Sandbox Code Playgroud)
我想创建两列,一列包含一年中的季度,另一列包含一年中的周数。这是我所做的,参考weekofyear和季度的文档:
from pyspark.sql import functions as F
sales_table = sales_table.withColumn("week_year", F.date_format(F.to_date("date", "yyyy-mm-dd"),
F.weekofyear("d")))
sales_table = sales_table.withColumn("quarter", F.date_format(F.to_date("date", …Run Code Online (Sandbox Code Playgroud) 我的 Spark 数据帧df的列名称是:A_x1、A_x2、B_x1、B_x2、C_x1、C_x2。
如何使用前缀从df创建 3 个新的 Spark 数据帧?输出应如下所示:
谢谢你!
我正在尝试估计数据块上 pyspark 3.0.1 中数学分数的比例。有些情况下我的total_marks是0。所以我写了下面的代码
df_data.registerTempTable('myTable')
df_oversees2=SQLContext.sql("select A.*,case when total_marks=0 then 0 else (maths_marks/total_marks) end as prop_maths from myTable A ")
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息
TypeError: sql() missing 1 required positional argument: 'sqlQuery'
Run Code Online (Sandbox Code Playgroud)
您能帮我解决这个问题吗?我还使用下面的代码验证了我的 Total_marks 和 maths_marks 是否存在于我的表格中
df1 = sqlContext.sql("select maths_marks,total_marks from myTable")
df1.show()
Run Code Online (Sandbox Code Playgroud)
我看到两个字段的输出
我有一个 pyspark 数据框,其中有一个字段,时间,有两种格式的时间戳,
"11-04-2019,00:32:13" and "2019-12-05T07:57:16.000Z"
Run Code Online (Sandbox Code Playgroud)
如何将所有时间戳转换为第二种格式,即与此格式匹配的 iso 时间格式?
%Y-%m-%dT%H:%M:%S.%fZ
Run Code Online (Sandbox Code Playgroud)
因此,理想情况下,“11-04-2019,00:32:13”之类的值应该是“2019-11-04T00:32:13.000Z”
我有这个数据框:
cSchema = StructType([StructField("id1", StringType()), StructField("id2", StringType()), StructField("params", StringType())\
,StructField("Col2", IntegerType())])
test_list = [[1, 2, '{"param1": "val1", "param2": "val2"}', 1], [1, 3, '{"param1": "val4", "param2": "val5"}', 3]]
df = spark.createDataFrame(test_list,schema=cSchema)
+---+---+--------------------+----+
|id1|id2| params|Col2|
+---+---+--------------------+----+
| 1| 2|{"param1": "val1"...| 1|
| 1| 3|{"param1": "val4"...| 3|
+---+---+--------------------+----+
Run Code Online (Sandbox Code Playgroud)
我想将参数分解为列:
+---+---+----+------+------+
|id1|id2|Col2|param1|param2|
+---+---+----+------+------+
| 1| 2| 1| val1| val2|
| 1| 3| 3| val4| val5|
+---+---+----+------+------+
Run Code Online (Sandbox Code Playgroud)
所以我编码如下:
schema2 = StructType([StructField("param1", StringType()), StructField("param2", StringType())])
df.withColumn(
"params", from_json("params", schema2)
).select(
col('id1'), col('id2'),col('Col2'), col('params.*')
).show()
Run Code Online (Sandbox Code Playgroud)
问题是params …
我正在处理芝加哥数据集,日期列采用字符串格式,由日期组成,但具有两种不同的格式:
Row(Date='01/10/2008 12:00'),
Row(Date='02/25/2008 08:20:53 PM')
Run Code Online (Sandbox Code Playgroud)
我找到下面的代码并尝试了这两种代码(我不确定是否正确),但是由于它包含两种格式,所以下面的代码都会收到错误,表明找不到该格式。
data_clean = data_clean.withColumn("Date_dt", f.from_unixtime(f.unix_timestamp("Date",'MM/dd/yy hh:mm:ss aa'),'MM/dd/yyyy HH:mm:ss'))
data_clean.withColumn("Date_dt", to_timestamp("Date", "MM/dd/yy HH:mm")).show(1, False)
Run Code Online (Sandbox Code Playgroud)
我还找到了以下解决方案,但我需要一个日期时间格式,包括小时和分钟作为输出:
from pyspark.sql.functions import coalesce, to_date
def to_date_(col, formats=("MM/dd/yyyy", "yyyy-MM-dd")):
return coalesce(*[to_date(col, f) for f in formats])
Run Code Online (Sandbox Code Playgroud)
您对检查格式并根据它进行转换有何建议?
我有一个如下所示的 Spark 数据框:
+----+------+-------------+
|user| level|value_pair |
+----+------+-------------+
| A | 25 |(23.52,25.12)|
| A | 6 |(0,0) |
| A | 2 |(11,12.12) |
| A | 32 |(17,16.12) |
| B | 22 |(19,57.12) |
| B | 42 |(10,3.2) |
| B | 43 |(32,21.0) |
| C | 33 |(12,0) |
| D | 32 |(265.21,19.2)|
| D | 62 |(57.12,50.12)|
| D | 32 |(75.12,57.12)|
| E | 63 |(0,0) |
+----+------+-------------+
Run Code Online (Sandbox Code Playgroud)
如何提取value_pair列中的值并将它们添加到名为 …
我有以下字典 -
config =
{
'inferschema':'True',
'header':'true'
}
Run Code Online (Sandbox Code Playgroud)
基于上面的 JSON 配置文件,我想通过使 Spark 的 .option 方法可配置来创建一个数据框。例如,上述配置的选项方法应如下所示,数据框应如下创建
dataframe= spark.read.format('CSV').option("header", "true").option("inferSchema", "true")
Run Code Online (Sandbox Code Playgroud) apache-spark-sql ×10
pyspark ×10
apache-spark ×9
python ×3
date ×1
json ×1
prefixes ×1
timestamp ×1