标签: apache-spark-sql

根据列的数据类型在pyspark数据框中填充空值

假设我有一个示例数据框,如下所示:

+-----+----+----+
| 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”列,所以我想要一个动态解决方案。

apache-spark-sql pyspark

1
推荐指数
1
解决办法
2212
查看次数

pyspark 数据框中每列的最大字符串长度

我正在 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)

apache-spark apache-spark-sql pyspark azure-databricks

1
推荐指数
1
解决办法
1万
查看次数

pyspark - 无法从日期列获取一年中的季度和周

我有一个 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)

python date apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
5845
查看次数

如何通过列名的前缀对 Spark 数据框进行子集化?

我的 Spark 数据帧df的列名称是:A_x1、A_x2、B_x1、B_x2、C_x1、C_x2。

如何使用前缀从df创建 3 个新的 Spark 数据帧?输出应如下所示:

  • 名为A_的数据框包含列 A_x1、A_x2、
  • 名为B_的数据框包含列 B_x1、B_x2、
  • 名为C_的数据帧包含列 C_x1、C_x2。

谢谢你!

prefixes apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
1160
查看次数

类型错误:sql() 缺少 1 个必需的位置参数:pyspark 中的“sqlQuery”

我正在尝试估计数据块上 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)

我看到两个字段的输出

apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
4591
查看次数

在pyspark中将时间戳格式转换为iso时间格式

我有一个 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”

python timestamp apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
6705
查看次数

从 json 字符串推断架构

我有这个数据框:

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 …

python json apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
7773
查看次数

Pyspark 将字符串转换为包含两种不同格式的日期时间戳列

我正在处理芝加哥数据集,日期列采用字符串格式,由日期组成,但具有两种不同的格式:

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)

您对检查格式并根据它进行转换有何建议?

apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
538
查看次数

从 Spark 数据框中的列中提取值并提取到两个新列

我有一个如下所示的 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列中的值并将它们添加到名为 …

apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
1375
查看次数

基于字典使spark的option方法可配置

我有以下字典 -

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 apache-spark-sql pyspark

1
推荐指数
1
解决办法
2713
查看次数